deps: enable OpenSSL asm support for riscv64

Move linux64-riscv64 from NO_ASM_ARCHS to ASM_ARCHS in the OpenSSL
config Makefile and regenerate the configuration. This adds asm/ and
asm_avx2/ config variants alongside the existing no-asm/ variant.

When riscv64 was first added to the OpenSSL config in 2021 (#40063),
OpenSSL had no RISC-V assembly support. OpenSSL 3.5.x now ships 17
perlasm generators covering AES (zvkned, zvkb, zkn), SHA-256/512
(zvknha, zvknhb), GHASH/GCM (zvkg, zvbc), ChaCha (v, zbb), SM3
(zvksh), SM4 (zvksed), and CPUID detection. Runtime capability
detection via riscvcap.c and the Linux hwprobe syscall ensures safe
fallback to generic C code on hardware without these extensions.

Also add riscv64 entries to the six asm gypi selector files:
openssl_asm.gypi, openssl_asm_avx2.gypi, openssl-cl_asm.gypi,
openssl-cl_asm_avx2.gypi, openssl-fips_asm.gypi, and
openssl-fips_asm_avx2.gypi.

Refs: https://github.com/nodejs/build/issues/4099
Signed-off-by: Jamie Magee <jamie.magee@gmail.com>
PR-URL: https://github.com/nodejs/node/pull/62606
Reviewed-By: Stewart X Addison <sxa@redhat.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
This commit is contained in:
Jamie Magee authored and GitHub committed 2026-07-10 12:36:10 +00:00
1 parent 4140d4c2c8
commit d6cd5c19cf
223 files changed
+122969 -1

No files matched your search

+1
View File
@@ -54,6 +54,7 @@ Here is a list of supported architectures for use of ASM in OpenSSL.
| linux | ppc64(*1) | linux-ppc64le | o |
| linux | s390 | linux32-s390x | o |
| linux | s390x | linux64-s390x | o |
| linux | riscv64 | linux64-riscv64 | - |
| mac | ia32 | darwin-i386-cc | - |
| mac | x64 | darwin64-x86-cc | o |
| win | ia32 | VC-WIN32 | - |
+2 -1
View File
@@ -13,9 +13,10 @@ ASM_ARCHS = aix64-gcc-as BSD-x86 BSD-x86_64 \
darwin64-x86_64-cc darwin-i386-cc darwin64-arm64-cc linux-aarch64 \
linux-armv4 linux-elf linux-x86_64 \
linux-ppc64le linux32-s390x linux64-s390x linux64-mips64\
linux64-riscv64 \
solaris-x86-gcc solaris64-x86_64-gcc VC-WIN64A VC-WIN32
NO_ASM_ARCHS = VC-WIN64-ARM linux64-riscv64 linux64-loongarch64
NO_ASM_ARCHS = VC-WIN64-ARM linux64-loongarch64
CC = gcc
FAKE_GCC = ../config/fake_gcc.pl
@@ -0,0 +1,404 @@
/*
* WARNING: do not edit!
* Generated by apps/progs.pl
*
* 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
*/
#include "progs.h"
FUNCTION functions[] = {
{FT_general, "asn1parse", asn1parse_main, asn1parse_options, NULL, NULL},
{FT_general, "ca", ca_main, ca_options, NULL, NULL},
#ifndef OPENSSL_NO_SOCK
{FT_general, "ciphers", ciphers_main, ciphers_options, NULL, NULL},
#endif
#ifndef OPENSSL_NO_CMP
{FT_general, "cmp", cmp_main, cmp_options, NULL, NULL},
#endif
#ifndef OPENSSL_NO_CMS
{FT_general, "cms", cms_main, cms_options, NULL, NULL},
#endif
{FT_general, "crl", crl_main, crl_options, NULL, NULL},
{FT_general, "crl2pkcs7", crl2pkcs7_main, crl2pkcs7_options, NULL, NULL},
{FT_general, "dgst", dgst_main, dgst_options, NULL, NULL},
#ifndef OPENSSL_NO_DH
{FT_general, "dhparam", dhparam_main, dhparam_options, NULL, NULL},
#endif
#ifndef OPENSSL_NO_DSA
{FT_general, "dsa", dsa_main, dsa_options, NULL, NULL},
#endif
#ifndef OPENSSL_NO_DSA
{FT_general, "dsaparam", dsaparam_main, dsaparam_options, NULL, NULL},
#endif
#ifndef OPENSSL_NO_EC
{FT_general, "ec", ec_main, ec_options, NULL, NULL},
#endif
#ifndef OPENSSL_NO_EC
{FT_general, "ecparam", ecparam_main, ecparam_options, NULL, NULL},
#endif
{FT_general, "enc", enc_main, enc_options, NULL, NULL},
#ifndef OPENSSL_NO_ENGINE
{FT_general, "engine", engine_main, engine_options, NULL, NULL},
#endif
{FT_general, "errstr", errstr_main, errstr_options, NULL, NULL},
{FT_general, "fipsinstall", fipsinstall_main, fipsinstall_options, NULL, NULL},
#ifndef OPENSSL_NO_DSA
{FT_general, "gendsa", gendsa_main, gendsa_options, NULL, NULL},
#endif
{FT_general, "genpkey", genpkey_main, genpkey_options, NULL, NULL},
#ifndef OPENSSL_NO_RSA
{FT_general, "genrsa", genrsa_main, genrsa_options, NULL, NULL},
#endif
{FT_general, "help", help_main, help_options, NULL, NULL},
{FT_general, "info", info_main, info_options, NULL, NULL},
{FT_general, "kdf", kdf_main, kdf_options, NULL, NULL},
{FT_general, "list", list_main, list_options, NULL, NULL},
{FT_general, "mac", mac_main, mac_options, NULL, NULL},
{FT_general, "nseq", nseq_main, nseq_options, NULL, NULL},
#ifndef OPENSSL_NO_OCSP
{FT_general, "ocsp", ocsp_main, ocsp_options, NULL, NULL},
#endif
{FT_general, "passwd", passwd_main, passwd_options, NULL, NULL},
{FT_general, "pkcs12", pkcs12_main, pkcs12_options, NULL, NULL},
{FT_general, "pkcs7", pkcs7_main, pkcs7_options, NULL, NULL},
{FT_general, "pkcs8", pkcs8_main, pkcs8_options, NULL, NULL},
{FT_general, "pkey", pkey_main, pkey_options, NULL, NULL},
{FT_general, "pkeyparam", pkeyparam_main, pkeyparam_options, NULL, NULL},
{FT_general, "pkeyutl", pkeyutl_main, pkeyutl_options, NULL, NULL},
{FT_general, "prime", prime_main, prime_options, NULL, NULL},
{FT_general, "rand", rand_main, rand_options, NULL, NULL},
{FT_general, "rehash", rehash_main, rehash_options, NULL, NULL},
{FT_general, "req", req_main, req_options, NULL, NULL},
{FT_general, "rsa", rsa_main, rsa_options, NULL, NULL},
#if !defined(OPENSSL_NO_DEPRECATED_3_0) && !defined(OPENSSL_NO_RSA)
{FT_general, "rsautl", rsautl_main, rsautl_options, "pkeyutl", "3.0"},
#endif
#ifndef OPENSSL_NO_SOCK
{FT_general, "s_client", s_client_main, s_client_options, NULL, NULL},
#endif
#ifndef OPENSSL_NO_SOCK
{FT_general, "s_server", s_server_main, s_server_options, NULL, NULL},
#endif
#ifndef OPENSSL_NO_SOCK
{FT_general, "s_time", s_time_main, s_time_options, NULL, NULL},
#endif
{FT_general, "sess_id", sess_id_main, sess_id_options, NULL, NULL},
{FT_general, "skeyutl", skeyutl_main, skeyutl_options, NULL, NULL},
{FT_general, "smime", smime_main, smime_options, NULL, NULL},
{FT_general, "speed", speed_main, speed_options, NULL, NULL},
{FT_general, "spkac", spkac_main, spkac_options, NULL, NULL},
#ifndef OPENSSL_NO_SRP
{FT_general, "srp", srp_main, srp_options, NULL, NULL},
#endif
{FT_general, "storeutl", storeutl_main, storeutl_options, NULL, NULL},
#ifndef OPENSSL_NO_TS
{FT_general, "ts", ts_main, ts_options, NULL, NULL},
#endif
{FT_general, "verify", verify_main, verify_options, NULL, NULL},
{FT_general, "version", version_main, version_options, NULL, NULL},
{FT_general, "x509", x509_main, x509_options, NULL, NULL},
#ifndef OPENSSL_NO_MD2
{FT_md, "md2", dgst_main, NULL, NULL},
#endif
#ifndef OPENSSL_NO_MD4
{FT_md, "md4", dgst_main, NULL, NULL},
#endif
{FT_md, "md5", dgst_main, NULL, NULL},
{FT_md, "sha1", dgst_main, NULL, NULL},
{FT_md, "sha224", dgst_main, NULL, NULL},
{FT_md, "sha256", dgst_main, NULL, NULL},
{FT_md, "sha384", dgst_main, NULL, NULL},
{FT_md, "sha512", dgst_main, NULL, NULL},
{FT_md, "sha512-224", dgst_main, NULL, NULL},
{FT_md, "sha512-256", dgst_main, NULL, NULL},
{FT_md, "sha3-224", dgst_main, NULL, NULL},
{FT_md, "sha3-256", dgst_main, NULL, NULL},
{FT_md, "sha3-384", dgst_main, NULL, NULL},
{FT_md, "sha3-512", dgst_main, NULL, NULL},
{FT_md, "shake128", dgst_main, NULL, NULL},
{FT_md, "shake256", dgst_main, NULL, NULL},
#ifndef OPENSSL_NO_MDC2
{FT_md, "mdc2", dgst_main, NULL, NULL},
#endif
#ifndef OPENSSL_NO_RMD160
{FT_md, "rmd160", dgst_main, NULL, NULL},
#endif
#ifndef OPENSSL_NO_BLAKE2
{FT_md, "blake2b512", dgst_main, NULL, NULL},
#endif
#ifndef OPENSSL_NO_BLAKE2
{FT_md, "blake2s256", dgst_main, NULL, NULL},
#endif
#ifndef OPENSSL_NO_SM3
{FT_md, "sm3", dgst_main, NULL, NULL},
#endif
{FT_cipher, "aes-128-cbc", enc_main, enc_options, NULL},
{FT_cipher, "aes-128-ecb", enc_main, enc_options, NULL},
{FT_cipher, "aes-192-cbc", enc_main, enc_options, NULL},
{FT_cipher, "aes-192-ecb", enc_main, enc_options, NULL},
{FT_cipher, "aes-256-cbc", enc_main, enc_options, NULL},
{FT_cipher, "aes-256-ecb", enc_main, enc_options, NULL},
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-128-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-128-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-128-ctr", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-128-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-128-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-128-cfb1", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-128-cfb8", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-192-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-192-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-192-ctr", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-192-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-192-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-192-cfb1", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-192-cfb8", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-256-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-256-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-256-ctr", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-256-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-256-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-256-cfb1", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-256-cfb8", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAMELLIA
{FT_cipher, "camellia-128-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAMELLIA
{FT_cipher, "camellia-128-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAMELLIA
{FT_cipher, "camellia-192-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAMELLIA
{FT_cipher, "camellia-192-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAMELLIA
{FT_cipher, "camellia-256-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAMELLIA
{FT_cipher, "camellia-256-ecb", enc_main, enc_options, NULL},
#endif
{FT_cipher, "base64", enc_main, enc_options, NULL},
#ifndef OPENSSL_NO_ZLIB
{FT_cipher, "zlib", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_BROTLI
{FT_cipher, "brotli", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ZSTD
{FT_cipher, "zstd", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des3", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "desx", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_IDEA
{FT_cipher, "idea", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_SEED
{FT_cipher, "seed", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC4
{FT_cipher, "rc4", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC4
{FT_cipher, "rc4-40", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC2
{FT_cipher, "rc2", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_BF
{FT_cipher, "bf", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAST
{FT_cipher, "cast", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC5
{FT_cipher, "rc5", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-ede", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-ede3", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-ede-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-ede3-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-ede-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-ede3-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-ede-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-ede3-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_IDEA
{FT_cipher, "idea-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_IDEA
{FT_cipher, "idea-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_IDEA
{FT_cipher, "idea-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_IDEA
{FT_cipher, "idea-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_SEED
{FT_cipher, "seed-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_SEED
{FT_cipher, "seed-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_SEED
{FT_cipher, "seed-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_SEED
{FT_cipher, "seed-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC2
{FT_cipher, "rc2-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC2
{FT_cipher, "rc2-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC2
{FT_cipher, "rc2-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC2
{FT_cipher, "rc2-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC2
{FT_cipher, "rc2-64-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC2
{FT_cipher, "rc2-40-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_BF
{FT_cipher, "bf-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_BF
{FT_cipher, "bf-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_BF
{FT_cipher, "bf-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_BF
{FT_cipher, "bf-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAST
{FT_cipher, "cast5-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAST
{FT_cipher, "cast5-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAST
{FT_cipher, "cast5-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAST
{FT_cipher, "cast5-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAST
{FT_cipher, "cast-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC5
{FT_cipher, "rc5-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC5
{FT_cipher, "rc5-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC5
{FT_cipher, "rc5-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC5
{FT_cipher, "rc5-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_SM4
{FT_cipher, "sm4-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_SM4
{FT_cipher, "sm4-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_SM4
{FT_cipher, "sm4-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_SM4
{FT_cipher, "sm4-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_SM4
{FT_cipher, "sm4-ctr", enc_main, enc_options, NULL},
#endif
{0, NULL, NULL, NULL, NULL}
};
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,694 @@
.text
.balign 16
.globl rv64i_zkne_encrypt
.type rv64i_zkne_encrypt,@function
rv64i_zkne_encrypt:
addi sp,sp,-16
sd x8,8(sp)
sd x9,0(sp)
# Load input to block cipher
ld x6,0(x10)
ld x7,8(x10)
# Load key
ld x13,0(x12)
ld x14,8(x12)
# Load number of rounds
lwu x30,240(x12)
# initial transformation
xor x6,x6,x13
xor x7,x7,x14
# The main loop only executes the first N-1 rounds.
add x30,x30,-1
# Do Nr - 1 rounds (final round is special)
1:
.word 913507379
.word 912491699
# Update key ptr to point to next key in schedule
add x12,x12,16
# Grab next key in schedule
ld x13,0(x12)
ld x14,8(x12)
xor x6,x8,x13
xor x7,x9,x14
add x30,x30,-1
bgtz x30,1b
# final round
.word 846398515
.word 845382835
# since not added 16 before
ld x13,16(x12)
ld x14,24(x12)
xor x6,x8,x13
xor x7,x9,x14
sd x6,0(x11)
sd x7,8(x11)
# Pop registers and return
ld x8,8(sp)
ld x9,0(sp)
addi sp,sp,16
ret
.text
.balign 16
.globl rv64i_zknd_decrypt
.type rv64i_zknd_decrypt,@function
rv64i_zknd_decrypt:
addi sp,sp,-16
sd x8,8(sp)
sd x9,0(sp)
# Load input to block cipher
ld x6,0(x10)
ld x7,8(x10)
# Load number of rounds
lwu x30,240(x12)
# Load the last key
slli x13,x30,4
add x12,x12,x13
ld x13,0(x12)
ld x14,8(x12)
xor x6,x6,x13
xor x7,x7,x14
# The main loop only executes the first N-1 rounds.
add x30,x30,-1
# Do Nr - 1 rounds (final round is special)
1:
.word 1047725107
.word 1046709427
# Update key ptr to point to next key in schedule
add x12,x12,-16
# Grab next key in schedule
ld x13,0(x12)
ld x14,8(x12)
xor x6,x8,x13
xor x7,x9,x14
add x30,x30,-1
bgtz x30,1b
# final round
.word 980616243
.word 979600563
add x12,x12,-16
ld x13,0(x12)
ld x14,8(x12)
xor x6,x8,x13
xor x7,x9,x14
sd x6,0(x11)
sd x7,8(x11)
# Pop registers and return
ld x8,8(sp)
ld x9,0(sp)
addi sp,sp,16
ret
.text
.balign 16
.globl rv64i_zkne_set_encrypt_key
.type rv64i_zkne_set_encrypt_key,@function
rv64i_zkne_set_encrypt_key:
addi sp,sp,-16
sd x8,0(sp)
# Determine number of rounds from key size in bits
li x6,128
bne x11,x6,1f
li x7,10 # key->rounds = 10 if bits == 128
sw x7,240(x12) # store key->rounds
ld x6,0(x10)
ld x7,8(x10)
sd x6,0(x12)
sd x7,8(x12)
.word 822318099
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
.word 823366675
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
.word 824415251
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
.word 825463827
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
.word 826512403
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
.word 827560979
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
.word 828609555
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
.word 829658131
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
.word 830706707
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
.word 831755283
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
j 4f
1:
li x6,192
bne x11,x6,2f
li x7,12 # key->rounds = 12 if bits == 192
sw x7,240(x12) # store key->rounds
ld x6,0(x10)
ld x7,8(x10)
ld x8,16(x10)
sd x6,0(x12)
sd x7,8(x12)
sd x8,16(x12)
.word 822351507
.word 2120647475
.word 2121466803
.word 2122548275
add x12,x12,24
sd x6,0(x12)
sd x7,8(x12)
sd x8,16(x12)
.word 823400083
.word 2120647475
.word 2121466803
.word 2122548275
add x12,x12,24
sd x6,0(x12)
sd x7,8(x12)
sd x8,16(x12)
.word 824448659
.word 2120647475
.word 2121466803
.word 2122548275
add x12,x12,24
sd x6,0(x12)
sd x7,8(x12)
sd x8,16(x12)
.word 825497235
.word 2120647475
.word 2121466803
.word 2122548275
add x12,x12,24
sd x6,0(x12)
sd x7,8(x12)
sd x8,16(x12)
.word 826545811
.word 2120647475
.word 2121466803
.word 2122548275
add x12,x12,24
sd x6,0(x12)
sd x7,8(x12)
sd x8,16(x12)
.word 827594387
.word 2120647475
.word 2121466803
.word 2122548275
add x12,x12,24
sd x6,0(x12)
sd x7,8(x12)
sd x8,16(x12)
.word 828642963
.word 2120647475
.word 2121466803
.word 2122548275
add x12,x12,24
sd x6,0(x12)
sd x7,8(x12)
sd x8,16(x12)
.word 829691539
.word 2120647475
.word 2121466803
add x12,x12,24
sd x6,0(x12)
sd x7,8(x12)
j 4f
2:
li x7,14 # key->rounds = 14 if bits == 256
li x6,256
beq x11,x6,3f
li a0,-2 # If bits != 128, 192, or 256, return -2
j 5f
3:
sw x7,240(x12) # store key->rounds
ld x6,0(x10)
ld x7,8(x10)
ld x8,16(x10)
ld x13,24(x10)
sd x6,0(x12)
sd x7,8(x12)
sd x8,16(x12)
sd x13,24(x12)
.word 822515475
.word 2120680243
.word 2121466803
add x12,x12,32
sd x6,0(x12)
sd x7,8(x12)
.word 832804627
.word 2122777651
.word 2127824563
sd x8,16(x12)
sd x13,24(x12)
.word 823564051
.word 2120680243
.word 2121466803
add x12,x12,32
sd x6,0(x12)
sd x7,8(x12)
.word 832804627
.word 2122777651
.word 2127824563
sd x8,16(x12)
sd x13,24(x12)
.word 824612627
.word 2120680243
.word 2121466803
add x12,x12,32
sd x6,0(x12)
sd x7,8(x12)
.word 832804627
.word 2122777651
.word 2127824563
sd x8,16(x12)
sd x13,24(x12)
.word 825661203
.word 2120680243
.word 2121466803
add x12,x12,32
sd x6,0(x12)
sd x7,8(x12)
.word 832804627
.word 2122777651
.word 2127824563
sd x8,16(x12)
sd x13,24(x12)
.word 826709779
.word 2120680243
.word 2121466803
add x12,x12,32
sd x6,0(x12)
sd x7,8(x12)
.word 832804627
.word 2122777651
.word 2127824563
sd x8,16(x12)
sd x13,24(x12)
.word 827758355
.word 2120680243
.word 2121466803
add x12,x12,32
sd x6,0(x12)
sd x7,8(x12)
.word 832804627
.word 2122777651
.word 2127824563
sd x8,16(x12)
sd x13,24(x12)
.word 828806931
.word 2120680243
.word 2121466803
add x12,x12,32
sd x6,0(x12)
sd x7,8(x12)
4: # return 0
li a0,0
5: # return a0
ld x8,0(sp)
addi sp,sp,16
ret
.text
.balign 16
.globl rv64i_zknd_set_decrypt_key
.type rv64i_zknd_set_decrypt_key,@function
rv64i_zknd_set_decrypt_key:
addi sp,sp,-16
sd x8,0(sp)
# Determine number of rounds from key size in bits
li x6,128
bne x11,x6,1f
li x7,10 # key->rounds = 10 if bits == 128
sw x7,240(x12) # store key->rounds
ld x6,0(x10)
ld x7,8(x10)
sd x6,0(x12)
sd x7,8(x12)
.word 822318099
.word 2120483635
.word 2121466803
add x12,x12,16
.word 805508115
sd x8,0(x12)
.word 805540883
sd x8,8(x12)
.word 823366675
.word 2120483635
.word 2121466803
add x12,x12,16
.word 805508115
sd x8,0(x12)
.word 805540883
sd x8,8(x12)
.word 824415251
.word 2120483635
.word 2121466803
add x12,x12,16
.word 805508115
sd x8,0(x12)
.word 805540883
sd x8,8(x12)
.word 825463827
.word 2120483635
.word 2121466803
add x12,x12,16
.word 805508115
sd x8,0(x12)
.word 805540883
sd x8,8(x12)
.word 826512403
.word 2120483635
.word 2121466803
add x12,x12,16
.word 805508115
sd x8,0(x12)
.word 805540883
sd x8,8(x12)
.word 827560979
.word 2120483635
.word 2121466803
add x12,x12,16
.word 805508115
sd x8,0(x12)
.word 805540883
sd x8,8(x12)
.word 828609555
.word 2120483635
.word 2121466803
add x12,x12,16
.word 805508115
sd x8,0(x12)
.word 805540883
sd x8,8(x12)
.word 829658131
.word 2120483635
.word 2121466803
add x12,x12,16
.word 805508115
sd x8,0(x12)
.word 805540883
sd x8,8(x12)
.word 830706707
.word 2120483635
.word 2121466803
add x12,x12,16
.word 805508115
sd x8,0(x12)
.word 805540883
sd x8,8(x12)
.word 831755283
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
j 4f
1:
li x6,192
bne x11,x6,2f
li x7,12 # key->rounds = 12 if bits == 192
sw x7,240(x12) # store key->rounds
ld x6,0(x10)
ld x7,8(x10)
ld x8,16(x10)
sd x6,0(x12)
sd x7,8(x12)
.word 805574291
sd x13,16(x12)
.word 822351507
.word 2120647475
.word 2121466803
add x12,x12,24
.word 805508755
sd x13,0(x12)
.word 805541523
sd x13,8(x12)
# the reason is in ke192enc
.word 2122548275
.word 805574291
sd x13,16(x12)
.word 823400083
.word 2120647475
.word 2121466803
add x12,x12,24
.word 805508755
sd x13,0(x12)
.word 805541523
sd x13,8(x12)
# the reason is in ke192enc
.word 2122548275
.word 805574291
sd x13,16(x12)
.word 824448659
.word 2120647475
.word 2121466803
add x12,x12,24
.word 805508755
sd x13,0(x12)
.word 805541523
sd x13,8(x12)
# the reason is in ke192enc
.word 2122548275
.word 805574291
sd x13,16(x12)
.word 825497235
.word 2120647475
.word 2121466803
add x12,x12,24
.word 805508755
sd x13,0(x12)
.word 805541523
sd x13,8(x12)
# the reason is in ke192enc
.word 2122548275
.word 805574291
sd x13,16(x12)
.word 826545811
.word 2120647475
.word 2121466803
add x12,x12,24
.word 805508755
sd x13,0(x12)
.word 805541523
sd x13,8(x12)
# the reason is in ke192enc
.word 2122548275
.word 805574291
sd x13,16(x12)
.word 827594387
.word 2120647475
.word 2121466803
add x12,x12,24
.word 805508755
sd x13,0(x12)
.word 805541523
sd x13,8(x12)
# the reason is in ke192enc
.word 2122548275
.word 805574291
sd x13,16(x12)
.word 828642963
.word 2120647475
.word 2121466803
add x12,x12,24
.word 805508755
sd x13,0(x12)
.word 805541523
sd x13,8(x12)
# the reason is in ke192enc
.word 2122548275
.word 805574291
sd x13,16(x12)
.word 829691539
.word 2120647475
.word 2121466803
add x12,x12,24
sd x6,0(x12)
sd x7,8(x12)
j 4f
2:
li x7,14 # key->rounds = 14 if bits == 256
li x6,256
beq x11,x6,3f
li a0,-2 # If bits != 128, 192, or 256, return -2
j 5f
3:
sw x7,240(x12) # store key->rounds
ld x6,0(x10)
ld x7,8(x10)
ld x8,16(x10)
ld x13,24(x10)
sd x6,0(x12)
sd x7,8(x12)
.word 805574419
sd x14,16(x12)
.word 805738259
sd x14,24(x12)
.word 822515475
.word 2120680243
.word 2121466803
add x12,x12,32
.word 832804627
.word 2122777651
.word 2127824563
.word 805508883
sd x14,0(x12)
.word 805541651
sd x14,8(x12)
.word 805574419
sd x14,16(x12)
.word 805738259
sd x14,24(x12)
.word 823564051
.word 2120680243
.word 2121466803
add x12,x12,32
.word 832804627
.word 2122777651
.word 2127824563
.word 805508883
sd x14,0(x12)
.word 805541651
sd x14,8(x12)
.word 805574419
sd x14,16(x12)
.word 805738259
sd x14,24(x12)
.word 824612627
.word 2120680243
.word 2121466803
add x12,x12,32
.word 832804627
.word 2122777651
.word 2127824563
.word 805508883
sd x14,0(x12)
.word 805541651
sd x14,8(x12)
.word 805574419
sd x14,16(x12)
.word 805738259
sd x14,24(x12)
.word 825661203
.word 2120680243
.word 2121466803
add x12,x12,32
.word 832804627
.word 2122777651
.word 2127824563
.word 805508883
sd x14,0(x12)
.word 805541651
sd x14,8(x12)
.word 805574419
sd x14,16(x12)
.word 805738259
sd x14,24(x12)
.word 826709779
.word 2120680243
.word 2121466803
add x12,x12,32
.word 832804627
.word 2122777651
.word 2127824563
.word 805508883
sd x14,0(x12)
.word 805541651
sd x14,8(x12)
.word 805574419
sd x14,16(x12)
.word 805738259
sd x14,24(x12)
.word 827758355
.word 2120680243
.word 2121466803
add x12,x12,32
.word 832804627
.word 2122777651
.word 2127824563
.word 805508883
sd x14,0(x12)
.word 805541651
sd x14,8(x12)
.word 805574419
sd x14,16(x12)
.word 805738259
sd x14,24(x12)
.word 828806931
.word 2120680243
.word 2121466803
add x12,x12,32
sd x6,0(x12)
sd x7,8(x12)
# last two one dropped
4: # return 0
li a0,0
5: # return a0
ld x8,0(sp)
addi sp,sp,16
ret
@@ -0,0 +1,943 @@
.text
.p2align 3
.globl rv64i_zvbb_zvkg_zvkned_aes_xts_encrypt
.type rv64i_zvbb_zvkg_zvkned_aes_xts_encrypt,@function
rv64i_zvbb_zvkg_zvkned_aes_xts_encrypt:
# Load number of rounds
lwu t0, 240(a4)
.word 3439489111
.word 34074119
.word 34041479
.word 2815667831
addi t0, t0, -1
addi a4, a4, 16
1:
.word 34041479
.word 2815503991
addi t0, t0, -1
addi a4, a4, 16
bnez t0, 1b
.word 34041479
.word 2815536759
# aes block size is 16
andi a6, a2, 15
mv t3, a2
beqz a6, 1f
sub a2, a2, a6
addi t3, a2, -16
1:
# We make the `LENGTH` become e32 length here.
srli t4, a2, 2
srli t3, t3, 2
# Load number of rounds
lwu t0, 240(a3)
li t1, 14
li t2, 10
beq t0, t1, aes_xts_enc_256
beq t0, t2, aes_xts_enc_128
.size rv64i_zvbb_zvkg_zvkned_aes_xts_encrypt,.-rv64i_zvbb_zvkg_zvkned_aes_xts_encrypt
.p2align 3
aes_xts_enc_128:
# load input
.word 221182167
.word 33909767
li t0, 5
# We could simplify the initialization steps if we have `block<=1`.
blt t4, t0, 1f
# Note: We use `vgmul` for GF(2^128) multiplication. The `vgmul` uses
# different order of coefficients. We should use`vbrev8` to reverse the
# data when we use `vgmul`.
.word 3439489111
.word 1271144535
.word 221179991
.word 1577072727
# v16: [r-IV0, r-IV0, ...]
.word 2785257591
# Prepare GF(2^128) multiplier [1, x, x^2, x^3, ...] in v8.
slli t0, t4, 2
.word 218296407
# v2: [`1`, `1`, `1`, `1`, ...]
.word 1577103703
# v3: [`0`, `1`, `2`, `3`, ...]
.word 1376297431
.word 227733591
# v4: [`1`, 0, `1`, 0, `1`, 0, `1`, 0, ...]
.word 1243816535
# v6: [`0`, 0, `1`, 0, `2`, 0, `3`, 0, ...]
.word 1244865367
slli t0, t4, 1
.word 219344983
# v8: [1<<0=1, 0, 0, 0, 1<<1=x, 0, 0, 0, 1<<2=x^2, 0, 0, 0, ...]
.word 3594716247
# Compute [r-IV0*1, r-IV0*x, r-IV0*x^2, r-IV0*x^3, ...] in v16
.word 221179991
.word 1250174039
.word 2726865015
# Compute [IV0*1, IV0*x, IV0*x^2, IV0*x^3, ...] in v28.
# Reverse the bits order back.
.word 1258565207
# Prepare the x^n multiplier in v20. The `n` is the aes-xts block number
# in a LMUL=4 register group.
# n = ((VLEN*LMUL)/(32*4)) = ((VLEN*4)/(32*4))
# = (VLEN/32)
# We could use vsetvli with `e32, m1` to compute the `n` number.
.word 218133207
li t1, 1
sll t0, t1, t0
.word 3447812183
.word 1577070679
.word 3380670551
.word 1577238615
.word 3447812183
.word 1241784407
.word 221179991
.word 1577073239
.word 2785258103
j 2f
1:
.word 3439489111
.word 1271146583
2:
.word 3439489111
.word 34005127
addi a3, a3, 16
.word 34005255
addi a3, a3, 16
.word 34005383
addi a3, a3, 16
.word 34005511
addi a3, a3, 16
.word 34005639
addi a3, a3, 16
.word 34005767
addi a3, a3, 16
.word 34005895
addi a3, a3, 16
.word 34006023
addi a3, a3, 16
.word 34006151
addi a3, a3, 16
.word 34006279
addi a3, a3, 16
.word 34006407
.word 221182167
j 1f
.Lenc_blocks_128:
.word 221182167
# load plaintext into v24
.word 33909767
# update iv
.word 2739447927
# reverse the iv's bits order back
.word 1258565207
1:
.word 797838423
slli t0, a7, 2
sub t4, t4, a7
add a0, a0, t0
.word 2786307191
.word 2787191927
.word 2788240503
.word 2789289079
.word 2790337655
.word 2791386231
.word 2792434807
.word 2793483383
.word 2794531959
.word 2795580535
.word 2796661879
.word 797838423
# store ciphertext
.word 221147223
.word 33942567
add a1, a1, t0
sub t3, t3, a7
bnez t4, .Lenc_blocks_128
bnez a6, 1f
ret
1:
# slidedown second to last block
addi a7, a7, -4
.word 3441586263
# ciphertext
.word 1065929815
# multiplier
.word 1057540183
.word 3439489111
.word 1577848023
# load last block into v24
# note: We should load the last block before store the second to last block
# for in-place operation.
.word 134770775
.word 33885191
# setup `x` multiplier with byte-reversed order
# 0b00000010 => 0b01000000 (0x40)
li t0, 0x40
.word 3439489111
.word 1577074263
.word 3355504727
.word 1577242199
# compute IV for last block
.word 3439489111
.word 2747836535
.word 1258565207
# store second to last block
.word 201879639
.word 33918119
# xts last block
.word 3439489111
.word 797838423
.word 2786307191
.word 2787191927
.word 2788240503
.word 2789289079
.word 2790337655
.word 2791386231
.word 2792434807
.word 2793483383
.word 2794531959
.word 2795580535
.word 2796661879
.word 797838423
# store last block ciphertext
addi a1, a1, -16
.word 33942567
ret
.size aes_xts_enc_128,.-aes_xts_enc_128
.p2align 3
aes_xts_enc_256:
# load input
.word 221182167
.word 33909767
li t0, 5
# We could simplify the initialization steps if we have `block<=1`.
blt t4, t0, 1f
# Note: We use `vgmul` for GF(2^128) multiplication. The `vgmul` uses
# different order of coefficients. We should use`vbrev8` to reverse the
# data when we use `vgmul`.
.word 3439489111
.word 1271144535
.word 221179991
.word 1577072727
# v16: [r-IV0, r-IV0, ...]
.word 2785257591
# Prepare GF(2^128) multiplier [1, x, x^2, x^3, ...] in v8.
slli t0, t4, 2
.word 218296407
# v2: [`1`, `1`, `1`, `1`, ...]
.word 1577103703
# v3: [`0`, `1`, `2`, `3`, ...]
.word 1376297431
.word 227733591
# v4: [`1`, 0, `1`, 0, `1`, 0, `1`, 0, ...]
.word 1243816535
# v6: [`0`, 0, `1`, 0, `2`, 0, `3`, 0, ...]
.word 1244865367
slli t0, t4, 1
.word 219344983
# v8: [1<<0=1, 0, 0, 0, 1<<1=x, 0, 0, 0, 1<<2=x^2, 0, 0, 0, ...]
.word 3594716247
# Compute [r-IV0*1, r-IV0*x, r-IV0*x^2, r-IV0*x^3, ...] in v16
.word 221179991
.word 1250174039
.word 2726865015
# Compute [IV0*1, IV0*x, IV0*x^2, IV0*x^3, ...] in v28.
# Reverse the bits order back.
.word 1258565207
# Prepare the x^n multiplier in v20. The `n` is the aes-xts block number
# in a LMUL=4 register group.
# n = ((VLEN*LMUL)/(32*4)) = ((VLEN*4)/(32*4))
# = (VLEN/32)
# We could use vsetvli with `e32, m1` to compute the `n` number.
.word 218133207
li t1, 1
sll t0, t1, t0
.word 3447812183
.word 1577070679
.word 3380670551
.word 1577238615
.word 3447812183
.word 1241784407
.word 221179991
.word 1577073239
.word 2785258103
j 2f
1:
.word 3439489111
.word 1271146583
2:
.word 3439489111
.word 34005127
addi a3, a3, 16
.word 34005255
addi a3, a3, 16
.word 34005383
addi a3, a3, 16
.word 34005511
addi a3, a3, 16
.word 34005639
addi a3, a3, 16
.word 34005767
addi a3, a3, 16
.word 34005895
addi a3, a3, 16
.word 34006023
addi a3, a3, 16
.word 34006151
addi a3, a3, 16
.word 34006279
addi a3, a3, 16
.word 34006407
addi a3, a3, 16
.word 34006535
addi a3, a3, 16
.word 34006663
addi a3, a3, 16
.word 34006791
addi a3, a3, 16
.word 34006919
.word 221182167
j 1f
.Lenc_blocks_256:
.word 221182167
# load plaintext into v24
.word 33909767
# update iv
.word 2739447927
# reverse the iv's bits order back
.word 1258565207
1:
.word 797838423
slli t0, a7, 2
sub t4, t4, a7
add a0, a0, t0
.word 2786307191
.word 2787191927
.word 2788240503
.word 2789289079
.word 2790337655
.word 2791386231
.word 2792434807
.word 2793483383
.word 2794531959
.word 2795580535
.word 2796629111
.word 2797677687
.word 2798726263
.word 2799774839
.word 2800856183
.word 797838423
# store ciphertext
.word 221147223
.word 33942567
add a1, a1, t0
sub t3, t3, a7
bnez t4, .Lenc_blocks_256
bnez a6, 1f
ret
1:
# slidedown second to last block
addi a7, a7, -4
.word 3441586263
# ciphertext
.word 1065929815
# multiplier
.word 1057540183
.word 3439489111
.word 1577848023
# load last block into v24
# note: We should load the last block before store the second to last block
# for in-place operation.
.word 134770775
.word 33885191
# setup `x` multiplier with byte-reversed order
# 0b00000010 => 0b01000000 (0x40)
li t0, 0x40
.word 3439489111
.word 1577074263
.word 3355504727
.word 1577242199
# compute IV for last block
.word 3439489111
.word 2747836535
.word 1258565207
# store second to last block
.word 201879639
.word 33918119
# xts last block
.word 3439489111
.word 797838423
.word 2786307191
.word 2787191927
.word 2788240503
.word 2789289079
.word 2790337655
.word 2791386231
.word 2792434807
.word 2793483383
.word 2794531959
.word 2795580535
.word 2796629111
.word 2797677687
.word 2798726263
.word 2799774839
.word 2800856183
.word 797838423
# store last block ciphertext
addi a1, a1, -16
.word 33942567
ret
.size aes_xts_enc_256,.-aes_xts_enc_256
.p2align 3
.globl rv64i_zvbb_zvkg_zvkned_aes_xts_decrypt
.type rv64i_zvbb_zvkg_zvkned_aes_xts_decrypt,@function
rv64i_zvbb_zvkg_zvkned_aes_xts_decrypt:
# Load number of rounds
lwu t0, 240(a4)
.word 3439489111
.word 34074119
.word 34041479
.word 2815667831
addi t0, t0, -1
addi a4, a4, 16
1:
.word 34041479
.word 2815503991
addi t0, t0, -1
addi a4, a4, 16
bnez t0, 1b
.word 34041479
.word 2815536759
# aes block size is 16
andi a6, a2, 15
beqz a6, 1f
sub a2, a2, a6
addi a2, a2, -16
1:
# We make the `LENGTH` become e32 length here.
srli t4, a2, 2
# Load number of rounds
lwu t0, 240(a3)
li t1, 14
li t2, 10
beq t0, t1, aes_xts_dec_256
beq t0, t2, aes_xts_dec_128
.size rv64i_zvbb_zvkg_zvkned_aes_xts_decrypt,.-rv64i_zvbb_zvkg_zvkned_aes_xts_decrypt
.p2align 3
aes_xts_dec_128:
# load input
.word 221182167
.word 33909767
li t0, 5
# We could simplify the initialization steps if we have `block<=1`.
blt t4, t0, 1f
# Note: We use `vgmul` for GF(2^128) multiplication. The `vgmul` uses
# different order of coefficients. We should use`vbrev8` to reverse the
# data when we use `vgmul`.
.word 3439489111
.word 1271144535
.word 221179991
.word 1577072727
# v16: [r-IV0, r-IV0, ...]
.word 2785257591
# Prepare GF(2^128) multiplier [1, x, x^2, x^3, ...] in v8.
slli t0, t4, 2
.word 218296407
# v2: [`1`, `1`, `1`, `1`, ...]
.word 1577103703
# v3: [`0`, `1`, `2`, `3`, ...]
.word 1376297431
.word 227733591
# v4: [`1`, 0, `1`, 0, `1`, 0, `1`, 0, ...]
.word 1243816535
# v6: [`0`, 0, `1`, 0, `2`, 0, `3`, 0, ...]
.word 1244865367
slli t0, t4, 1
.word 219344983
# v8: [1<<0=1, 0, 0, 0, 1<<1=x, 0, 0, 0, 1<<2=x^2, 0, 0, 0, ...]
.word 3594716247
# Compute [r-IV0*1, r-IV0*x, r-IV0*x^2, r-IV0*x^3, ...] in v16
.word 221179991
.word 1250174039
.word 2726865015
# Compute [IV0*1, IV0*x, IV0*x^2, IV0*x^3, ...] in v28.
# Reverse the bits order back.
.word 1258565207
# Prepare the x^n multiplier in v20. The `n` is the aes-xts block number
# in a LMUL=4 register group.
# n = ((VLEN*LMUL)/(32*4)) = ((VLEN*4)/(32*4))
# = (VLEN/32)
# We could use vsetvli with `e32, m1` to compute the `n` number.
.word 218133207
li t1, 1
sll t0, t1, t0
.word 3447812183
.word 1577070679
.word 3380670551
.word 1577238615
.word 3447812183
.word 1241784407
.word 221179991
.word 1577073239
.word 2785258103
j 2f
1:
.word 3439489111
.word 1271146583
2:
.word 3439489111
.word 34005127
addi a3, a3, 16
.word 34005255
addi a3, a3, 16
.word 34005383
addi a3, a3, 16
.word 34005511
addi a3, a3, 16
.word 34005639
addi a3, a3, 16
.word 34005767
addi a3, a3, 16
.word 34005895
addi a3, a3, 16
.word 34006023
addi a3, a3, 16
.word 34006151
addi a3, a3, 16
.word 34006279
addi a3, a3, 16
.word 34006407
beqz t4, 2f
.word 221182167
j 1f
.Ldec_blocks_128:
.word 221182167
# load ciphertext into v24
.word 33909767
# update iv
.word 2739447927
# reverse the iv's bits order back
.word 1258565207
1:
.word 797838423
slli t0, a7, 2
sub t4, t4, a7
add a0, a0, t0
.word 2796792951
.word 2795514999
.word 2794466423
.word 2793417847
.word 2792369271
.word 2791320695
.word 2790272119
.word 2789223543
.word 2788174967
.word 2787126391
.word 2786110583
.word 797838423
# store plaintext
.word 33942567
add a1, a1, t0
bnez t4, .Ldec_blocks_128
2:
bnez a6, 1f
ret
1:
# load second to last block's ciphertext
.word 3439489111
.word 33909767
addi a0, a0, 16
# setup `x` multiplier with byte-reversed order
# 0b00000010 => 0b01000000 (0x40)
li t0, 0x40
.word 3439489111
.word 1577073239
.word 3355504727
.word 1577241175
beqz a2, 1f
# slidedown third to last block
addi a7, a7, -4
.word 3441586263
# multiplier
.word 1057540183
# compute IV for last block
.word 3439489111
.word 2739447927
.word 1258565207
# compute IV for second to last block
.word 2739447927
.word 1258565335
j 2f
1:
# compute IV for second to last block
.word 3439489111
.word 2739447927
.word 1258565335
2:
## xts second to last block
.word 3439489111
.word 797871191
.word 2796792951
.word 2795514999
.word 2794466423
.word 2793417847
.word 2792369271
.word 2791320695
.word 2790272119
.word 2789223543
.word 2788174967
.word 2787126391
.word 2786110583
.word 797871191
.word 1577848023
# load last block ciphertext
.word 134770775
.word 33885191
# store second to last block plaintext
addi t0, a1, 16
.word 33721511
## xts last block
.word 3439489111
.word 797838423
.word 2796792951
.word 2795514999
.word 2794466423
.word 2793417847
.word 2792369271
.word 2791320695
.word 2790272119
.word 2789223543
.word 2788174967
.word 2787126391
.word 2786110583
.word 797838423
# store second to last block plaintext
.word 33942567
ret
.size aes_xts_dec_128,.-aes_xts_dec_128
.p2align 3
aes_xts_dec_256:
# load input
.word 221182167
.word 33909767
li t0, 5
# We could simplify the initialization steps if we have `block<=1`.
blt t4, t0, 1f
# Note: We use `vgmul` for GF(2^128) multiplication. The `vgmul` uses
# different order of coefficients. We should use`vbrev8` to reverse the
# data when we use `vgmul`.
.word 3439489111
.word 1271144535
.word 221179991
.word 1577072727
# v16: [r-IV0, r-IV0, ...]
.word 2785257591
# Prepare GF(2^128) multiplier [1, x, x^2, x^3, ...] in v8.
slli t0, t4, 2
.word 218296407
# v2: [`1`, `1`, `1`, `1`, ...]
.word 1577103703
# v3: [`0`, `1`, `2`, `3`, ...]
.word 1376297431
.word 227733591
# v4: [`1`, 0, `1`, 0, `1`, 0, `1`, 0, ...]
.word 1243816535
# v6: [`0`, 0, `1`, 0, `2`, 0, `3`, 0, ...]
.word 1244865367
slli t0, t4, 1
.word 219344983
# v8: [1<<0=1, 0, 0, 0, 1<<1=x, 0, 0, 0, 1<<2=x^2, 0, 0, 0, ...]
.word 3594716247
# Compute [r-IV0*1, r-IV0*x, r-IV0*x^2, r-IV0*x^3, ...] in v16
.word 221179991
.word 1250174039
.word 2726865015
# Compute [IV0*1, IV0*x, IV0*x^2, IV0*x^3, ...] in v28.
# Reverse the bits order back.
.word 1258565207
# Prepare the x^n multiplier in v20. The `n` is the aes-xts block number
# in a LMUL=4 register group.
# n = ((VLEN*LMUL)/(32*4)) = ((VLEN*4)/(32*4))
# = (VLEN/32)
# We could use vsetvli with `e32, m1` to compute the `n` number.
.word 218133207
li t1, 1
sll t0, t1, t0
.word 3447812183
.word 1577070679
.word 3380670551
.word 1577238615
.word 3447812183
.word 1241784407
.word 221179991
.word 1577073239
.word 2785258103
j 2f
1:
.word 3439489111
.word 1271146583
2:
.word 3439489111
.word 34005127
addi a3, a3, 16
.word 34005255
addi a3, a3, 16
.word 34005383
addi a3, a3, 16
.word 34005511
addi a3, a3, 16
.word 34005639
addi a3, a3, 16
.word 34005767
addi a3, a3, 16
.word 34005895
addi a3, a3, 16
.word 34006023
addi a3, a3, 16
.word 34006151
addi a3, a3, 16
.word 34006279
addi a3, a3, 16
.word 34006407
addi a3, a3, 16
.word 34006535
addi a3, a3, 16
.word 34006663
addi a3, a3, 16
.word 34006791
addi a3, a3, 16
.word 34006919
beqz t4, 2f
.word 221182167
j 1f
.Ldec_blocks_256:
.word 221182167
# load ciphertext into v24
.word 33909767
# update iv
.word 2739447927
# reverse the iv's bits order back
.word 1258565207
1:
.word 797838423
slli t0, a7, 2
sub t4, t4, a7
add a0, a0, t0
.word 2800987255
.word 2799709303
.word 2798660727
.word 2797612151
.word 2796563575
.word 2795514999
.word 2794466423
.word 2793417847
.word 2792369271
.word 2791320695
.word 2790272119
.word 2789223543
.word 2788174967
.word 2787126391
.word 2786110583
.word 797838423
# store plaintext
.word 33942567
add a1, a1, t0
bnez t4, .Ldec_blocks_256
2:
bnez a6, 1f
ret
1:
# load second to last block's ciphertext
.word 3439489111
.word 33909767
addi a0, a0, 16
# setup `x` multiplier with byte-reversed order
# 0b00000010 => 0b01000000 (0x40)
li t0, 0x40
.word 3439489111
.word 1577073239
.word 3355504727
.word 1577241175
beqz a2, 1f
# slidedown third to last block
addi a7, a7, -4
.word 3441586263
# multiplier
.word 1057540183
# compute IV for last block
.word 3439489111
.word 2739447927
.word 1258565207
# compute IV for second to last block
.word 2739447927
.word 1258565335
j 2f
1:
# compute IV for second to last block
.word 3439489111
.word 2739447927
.word 1258565335
2:
## xts second to last block
.word 3439489111
.word 797871191
.word 2800987255
.word 2799709303
.word 2798660727
.word 2797612151
.word 2796563575
.word 2795514999
.word 2794466423
.word 2793417847
.word 2792369271
.word 2791320695
.word 2790272119
.word 2789223543
.word 2788174967
.word 2787126391
.word 2786110583
.word 797871191
.word 1577848023
# load last block ciphertext
.word 134770775
.word 33885191
# store second to last block plaintext
addi t0, a1, 16
.word 33721511
## xts last block
.word 3439489111
.word 797838423
.word 2800987255
.word 2799709303
.word 2798660727
.word 2797612151
.word 2796563575
.word 2795514999
.word 2794466423
.word 2793417847
.word 2792369271
.word 2791320695
.word 2790272119
.word 2789223543
.word 2788174967
.word 2787126391
.word 2786110583
.word 797838423
# store second to last block plaintext
.word 33942567
ret
.size aes_xts_dec_256,.-aes_xts_dec_256
@@ -0,0 +1,326 @@
.text
.p2align 3
.globl rv64i_zvkb_zvkned_ctr32_encrypt_blocks
.type rv64i_zvkb_zvkned_ctr32_encrypt_blocks,@function
rv64i_zvkb_zvkned_ctr32_encrypt_blocks:
beqz a2, 1f
# Load number of rounds
lwu t0, 240(a3)
li t1, 14
li t2, 12
li t3, 10
slli t5, a2, 2
beq t0, t1, ctr32_encrypt_blocks_256
beq t0, t2, ctr32_encrypt_blocks_192
beq t0, t3, ctr32_encrypt_blocks_128
1:
ret
.size rv64i_zvkb_zvkned_ctr32_encrypt_blocks,.-rv64i_zvkb_zvkned_ctr32_encrypt_blocks
.p2align 3
ctr32_encrypt_blocks_128:
# Load all 11 round keys to v1-v11 registers.
.word 3439489111
.word 34005127
addi a3, a3, 16
.word 34005255
addi a3, a3, 16
.word 34005383
addi a3, a3, 16
.word 34005511
addi a3, a3, 16
.word 34005639
addi a3, a3, 16
.word 34005767
addi a3, a3, 16
.word 34005895
addi a3, a3, 16
.word 34006023
addi a3, a3, 16
.word 34006151
addi a3, a3, 16
.word 34006279
addi a3, a3, 16
.word 34006407
# Setup mask into v0
# The mask pattern for 4*N-th elements
# mask v0: [000100010001....]
# Note:
# We could setup the mask just for the maximum element length instead of
# the VLMAX.
li t0, 0b10001000
.word 201356247
.word 1577238615
# Load IV.
# v31:[IV0, IV1, IV2, big-endian count]
.word 3439489111
.word 34041735
# Convert the big-endian counter into little-endian.
.word 3305271383
.word 1240772567
# Splat the IV to v16
.word 221212759
.word 1577072727
.word 2817763447
# Prepare the ctr pattern into v20
# v20: [x, x, x, 0, x, x, x, 1, x, x, x, 2, ...]
.word 1342712407
# v16:[IV0, IV1, IV2, count+0, IV0, IV1, IV2, count+1, ...]
.word 86998743
.word 17434711
##### AES body
j 2f
1:
.word 86998743
# Increase ctr in v16.
.word 17811543
2:
# Load plaintext into v20
.word 33909255
slli t0, t4, 2
srli t6, t4, 2
sub t5, t5, t4
add a0, a0, t0
# Prepare the AES ctr input into v24.
# The ctr data uses big-endian form.
.word 1577585751
.word 1233431639
.word 2786307191
.word 2787191927
.word 2788240503
.word 2789289079
.word 2790337655
.word 2791386231
.word 2792434807
.word 2793483383
.word 2794531959
.word 2795580535
.word 2796661879
# ciphertext
.word 797576279
# Store the ciphertext.
.word 33942567
add a1, a1, t0
bnez t5, 1b
ret
.size ctr32_encrypt_blocks_128,.-ctr32_encrypt_blocks_128
.p2align 3
ctr32_encrypt_blocks_192:
# Load all 13 round keys to v1-v13 registers.
.word 3439489111
.word 34005127
addi a3, a3, 16
.word 34005255
addi a3, a3, 16
.word 34005383
addi a3, a3, 16
.word 34005511
addi a3, a3, 16
.word 34005639
addi a3, a3, 16
.word 34005767
addi a3, a3, 16
.word 34005895
addi a3, a3, 16
.word 34006023
addi a3, a3, 16
.word 34006151
addi a3, a3, 16
.word 34006279
addi a3, a3, 16
.word 34006407
addi a3, a3, 16
.word 34006535
addi a3, a3, 16
.word 34006663
# Setup mask into v0
# The mask pattern for 4*N-th elements
# mask v0: [000100010001....]
# Note:
# We could setup the mask just for the maximum element length instead of
# the VLMAX.
li t0, 0b10001000
.word 201356247
.word 1577238615
# Load IV.
# v31:[IV0, IV1, IV2, big-endian count]
.word 3439489111
.word 34041735
# Convert the big-endian counter into little-endian.
.word 3305271383
.word 1240772567
# Splat the IV to v16
.word 221212759
.word 1577072727
.word 2817763447
# Prepare the ctr pattern into v20
# v20: [x, x, x, 0, x, x, x, 1, x, x, x, 2, ...]
.word 1342712407
# v16:[IV0, IV1, IV2, count+0, IV0, IV1, IV2, count+1, ...]
.word 86998743
.word 17434711
##### AES body
j 2f
1:
.word 86998743
# Increase ctr in v16.
.word 17811543
2:
# Load plaintext into v20
.word 33909255
slli t0, t4, 2
srli t6, t4, 2
sub t5, t5, t4
add a0, a0, t0
# Prepare the AES ctr input into v24.
# The ctr data uses big-endian form.
.word 1577585751
.word 1233431639
.word 2786307191
.word 2787191927
.word 2788240503
.word 2789289079
.word 2790337655
.word 2791386231
.word 2792434807
.word 2793483383
.word 2794531959
.word 2795580535
.word 2796629111
.word 2797677687
.word 2798759031
# ciphertext
.word 797576279
# Store the ciphertext.
.word 33942567
add a1, a1, t0
bnez t5, 1b
ret
.size ctr32_encrypt_blocks_192,.-ctr32_encrypt_blocks_192
.p2align 3
ctr32_encrypt_blocks_256:
# Load all 15 round keys to v1-v15 registers.
.word 3439489111
.word 34005127
addi a3, a3, 16
.word 34005255
addi a3, a3, 16
.word 34005383
addi a3, a3, 16
.word 34005511
addi a3, a3, 16
.word 34005639
addi a3, a3, 16
.word 34005767
addi a3, a3, 16
.word 34005895
addi a3, a3, 16
.word 34006023
addi a3, a3, 16
.word 34006151
addi a3, a3, 16
.word 34006279
addi a3, a3, 16
.word 34006407
addi a3, a3, 16
.word 34006535
addi a3, a3, 16
.word 34006663
addi a3, a3, 16
.word 34006791
addi a3, a3, 16
.word 34006919
# Setup mask into v0
# The mask pattern for 4*N-th elements
# mask v0: [000100010001....]
# Note:
# We could setup the mask just for the maximum element length instead of
# the VLMAX.
li t0, 0b10001000
.word 201356247
.word 1577238615
# Load IV.
# v31:[IV0, IV1, IV2, big-endian count]
.word 3439489111
.word 34041735
# Convert the big-endian counter into little-endian.
.word 3305271383
.word 1240772567
# Splat the IV to v16
.word 221212759
.word 1577072727
.word 2817763447
# Prepare the ctr pattern into v20
# v20: [x, x, x, 0, x, x, x, 1, x, x, x, 2, ...]
.word 1342712407
# v16:[IV0, IV1, IV2, count+0, IV0, IV1, IV2, count+1, ...]
.word 86998743
.word 17434711
##### AES body
j 2f
1:
.word 86998743
# Increase ctr in v16.
.word 17811543
2:
# Load plaintext into v20
.word 33909255
slli t0, t4, 2
srli t6, t4, 2
sub t5, t5, t4
add a0, a0, t0
# Prepare the AES ctr input into v24.
# The ctr data uses big-endian form.
.word 1577585751
.word 1233431639
.word 2786307191
.word 2787191927
.word 2788240503
.word 2789289079
.word 2790337655
.word 2791386231
.word 2792434807
.word 2793483383
.word 2794531959
.word 2795580535
.word 2796629111
.word 2797677687
.word 2798726263
.word 2799774839
.word 2800856183
# ciphertext
.word 797576279
# Store the ciphertext.
.word 33942567
add a1, a1, t0
bnez t5, 1b
ret
.size ctr32_encrypt_blocks_256,.-ctr32_encrypt_blocks_256
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,35 @@
/*
* WARNING: do not edit!
* Generated by util/mkbuildinf.pl
*
* Copyright 2014-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
*/
#define PLATFORM "platform: linux64-riscv64"
#define DATE "built on: Tue Jun 30 04:15:54 2026 UTC"
/*
* Generate compiler_flags as an array of individual characters. This is a
* workaround for the situation where CFLAGS gets too long for a C90 string
* literal
*/
static const char compiler_flags[] = {
'c','o','m','p','i','l','e','r',':',' ','g','c','c',' ','-','f',
'P','I','C',' ','-','p','t','h','r','e','a','d',' ','-','W','a',
',','-','-','n','o','e','x','e','c','s','t','a','c','k',' ','-',
'W','a','l','l',' ','-','O','3',' ','-','D','O','P','E','N','S',
'S','L','_','U','S','E','_','N','O','D','E','L','E','T','E',' ',
'-','D','O','P','E','N','S','S','L','_','P','I','C',' ','-','D',
'O','P','E','N','S','S','L','_','B','U','I','L','D','I','N','G',
'_','O','P','E','N','S','S','L',' ','-','D','B','R','O','T','L',
'I',' ','-','D','Z','L','I','B',' ','-','D','Z','S','T','D',' ',
'-','D','N','D','E','B','U','G',' ','-','I','.','.','/','.','.',
'/','b','r','o','t','l','i','/','c','/','i','n','c','l','u','d',
'e',' ','-','I','.','.','/','.','.','/','z','l','i','b',' ','-',
'I','.','.','/','.','.','/','z','s','t','d','/','l','i','b','\0'
};
@@ -0,0 +1,461 @@
.text
.p2align 3
.globl ChaCha20_ctr32_v_zbb_zvkb
.type ChaCha20_ctr32_v_zbb_zvkb,@function
ChaCha20_ctr32_v_zbb_zvkb:
addi sp, sp, -96
sd s0, 0(sp)
sd s1, 8(sp)
sd s2, 16(sp)
sd s3, 24(sp)
sd s4, 32(sp)
sd s5, 40(sp)
sd s6, 48(sp)
sd s7, 56(sp)
sd s8, 64(sp)
sd s9, 72(sp)
sd s10, 80(sp)
sd s11, 88(sp)
addi sp, sp, -64
lw t2, 0(a4)
.Lblock_loop:
# We will use the scalar ALU for 1 chacha block.
srli t3, a2, 6
.word 219050839
slli t4, t1, 6
bltu t4, a2, 1f
# Since there is no more chacha block existed, we need to split 1 block
# from vector ALU.
addi t4, t1, -1
.word 219083607
1:
#### chacha block data
# init chacha const states into v0~v3
# "expa" little endian
li a5, 0x61707865
.word 1577566295
# "nd 3" little endian
li a6, 0x3320646e
.word 1577599191
# "2-by" little endian
li a7, 0x79622d32
.word 1577632087
# "te k" little endian
li s0, 0x6b206574
lw s1, 0(a3)
.word 1577337303
# init chacha key states into v4~v11
lw s2, 4(a3)
.word 1577370199
lw s3, 8(a3)
.word 1577665239
lw s4, 12(a3)
.word 1577698135
lw s5, 16(a3)
.word 1577731031
lw s6, 20(a3)
.word 1577763927
lw s7, 24(a3)
.word 1577796823
lw s8, 28(a3)
.word 1577829719
.word 1577862615
# init chacha key states into v12~v13
lw s10, 4(a4)
.word 1376298583
lw s11, 8(a4)
.word 46384727
lw t0, 12(a4)
.word 1577928407
add s9, t2, t1
# init chacha nonce states into v14~v15
.word 1577961303
.word 1577240535
li t3, 64
# load the top-half of input data into v16~v23
.word 3955615751
# till now in block_loop, we used:
# - v0~v15 for chacha states.
# - v16~v23 for top-half of input data.
# - v24~v31 haven't been used yet.
# 20 round groups
li t3, 10
.Lround_loop:
# we can use v24~v31 as temporary registers in round_loop.
addi t3, t3, -1
# a += b; d ^= a; d <<<= 16;
.word 33685591
add a5, a5, s1
.word 34767063
add a6, a6, s2
.word 35848535
add a7, a7, s3
.word 36930007
add s0, s0, s4
.word 784336471
xor s9, s9, a5
.word 785417943
xor s10, s10, a6
.word 786499415
xor s11, s11, a7
.word 787580887
xor t0, t0, s0
.word 1388852823
.word 1628232859
.word 1389901527
.word 1628265755
.word 1390950231
.word 1628298651
.word 1391998935
.word 1627574939
# c += d; b ^= c; b <<<= 12;
.word 42337367
add s5, s5, s9
.word 43418839
add s6, s6, s10
.word 44500311
add s7, s7, s11
.word 45581783
add s8, s8, t0
.word 776208983
xor s1, s1, s5
.word 777290455
xor s2, s2, s6
.word 778371927
xor s3, s3, s7
.word 779453399
xor s4, s4, s8
.word 1380594263
.word 1631900827
.word 1381642967
.word 1632196891
.word 1382691671
.word 1632229787
.word 1383740375
.word 1632262683
# a += b; d ^= a; d <<<= 8;
.word 33685591
add a5, a5, s1
.word 34767063
add a6, a6, s2
.word 35848535
add a7, a7, s3
.word 36930007
add s0, s0, s4
.word 784336471
xor s9, s9, a5
.word 785417943
xor s10, s10, a6
.word 786499415
xor s11, s11, a7
.word 787580887
xor t0, t0, s0
.word 1389114967
.word 1636621467
.word 1390163671
.word 1636654363
.word 1391212375
.word 1636687259
.word 1392261079
.word 1635963547
# c += d; b ^= c; b <<<= 7;
.word 42337367
add s5, s5, s9
.word 43418839
add s6, s6, s10
.word 44500311
add s7, s7, s11
.word 45581783
add s8, s8, t0
.word 776208983
xor s1, s1, s5
.word 777290455
xor s2, s2, s6
.word 778371927
xor s3, s3, s7
.word 779453399
xor s4, s4, s8
.word 1380758103
.word 1637143707
.word 1381806807
.word 1637439771
.word 1382855511
.word 1637472667
.word 1383904215
.word 1637505563
# a += b; d ^= a; d <<<= 16;
.word 36831703
add s0, s0, s1
.word 33718359
add a5, a5, s2
.word 34799831
add a6, a6, s3
.word 35881303
add a7, a7, s4
.word 786532183
xor s11, s11, s0
.word 787482583
xor t0, t0, a5
.word 784369239
xor s9, s9, a6
.word 785450711
xor s10, s10, a7
.word 1390950231
.word 1628298651
.word 1391998935
.word 1627574939
.word 1388852823
.word 1628232859
.word 1389901527
.word 1628265755
# c += d; b ^= c; b <<<= 12;
.word 43451607
add s6, s6, s11
.word 44533079
add s7, s7, t0
.word 45483479
add s8, s8, s9
.word 42370135
add s5, s5, s10
.word 776241751
xor s1, s1, s6
.word 777323223
xor s2, s2, s7
.word 778404695
xor s3, s3, s8
.word 779355095
xor s4, s4, s5
.word 1380594263
.word 1631900827
.word 1381642967
.word 1632196891
.word 1382691671
.word 1632229787
.word 1383740375
.word 1632262683
# a += b; d ^= a; d <<<= 8;
.word 36831703
add s0, s0, s1
.word 33718359
add a5, a5, s2
.word 34799831
add a6, a6, s3
.word 35881303
add a7, a7, s4
.word 786532183
xor s11, s11, s0
.word 787482583
xor t0, t0, a5
.word 784369239
xor s9, s9, a6
.word 785450711
xor s10, s10, a7
.word 1391212375
.word 1636687259
.word 1392261079
.word 1635963547
.word 1389114967
.word 1636621467
.word 1390163671
.word 1636654363
# c += d; b ^= c; b <<<= 7;
.word 43451607
add s6, s6, s11
.word 44533079
add s7, s7, t0
.word 45483479
add s8, s8, s9
.word 42370135
add s5, s5, s10
.word 776241751
xor s1, s1, s6
.word 777323223
xor s2, s2, s7
.word 778404695
xor s3, s3, s8
.word 779355095
xor s4, s4, s5
.word 1380758103
.word 1637143707
.word 1381806807
.word 1637439771
.word 1382855511
.word 1637472667
.word 1383904215
.word 1637505563
bnez t3, .Lround_loop
li t3, 64
# load the bottom-half of input data into v24~v31
addi t4, a1, 32
.word 3956206599
# now, there are no free vector registers until the round_loop exits.
# add chacha top-half initial block states
# "expa" little endian
li t3, 0x61707865
.word 34488407
add a5, a5, t3
# "nd 3" little endian
li t4, 0x3320646e
.word 35569879
add a6, a6, t4
lw t3, 0(a3)
# "2-by" little endian
li t5, 0x79622d32
.word 36651351
add a7, a7, t5
lw t4, 4(a3)
# "te k" little endian
li t6, 0x6b206574
.word 37732823
add s0, s0, t6
lw t5, 8(a3)
.word 38683223
add s1, s1, t3
lw t6, 12(a3)
.word 39764695
add s2, s2, t4
.word 40846167
add s3, s3, t5
.word 41927639
add s4, s4, t6
# xor with the top-half input
.word 788531287
sw a5, 0(sp)
sw a6, 4(sp)
.word 789612759
sw a7, 8(sp)
sw s0, 12(sp)
.word 790694231
sw s1, 16(sp)
sw s2, 20(sp)
.word 791775703
sw s3, 24(sp)
sw s4, 28(sp)
.word 792857175
lw t3, 16(a3)
.word 793938647
lw t4, 20(a3)
.word 795020119
lw t5, 24(a3)
.word 796101591
# save the top-half of output from v16~v23
li t6, 64
.word 3958728743
# add chacha bottom-half initial block states
.word 42878039
add s5, s5, t3
lw t6, 28(a3)
.word 43959511
add s6, s6, t4
lw t3, 4(a4)
.word 45040983
add s7, s7, t5
lw t4, 8(a4)
.word 46122455
add s8, s8, t6
lw t5, 12(a4)
.word 1376297047
add s9, s9, t2
.word 46384727
add s9, s9, t1
.word 48121559
add s10, s10, t3
.word 49203031
add s11, s11, t4
.word 50284503
add t0, t0, t5
.word 46138967
# xor with the bottom-half input
.word 797183063
sw s5, 32(sp)
.word 798264535
sw s6, 36(sp)
.word 799346007
sw s7, 40(sp)
.word 800427479
sw s8, 44(sp)
.word 802590423
sw s9, 48(sp)
.word 801508951
sw s10, 52(sp)
.word 803671895
sw s11, 56(sp)
.word 804753367
sw t0, 60(sp)
# save the bottom-half of output from v24~v31
li t3, 64
addi t4, a0, 32
.word 3956206631
# the computed vector parts: `64 * VL`
slli t3, t1, 6
add a1, a1, t3
add a0, a0, t3
sub a2, a2, t3
add t2, t2, t1
# process the scalar data block
addi t2, t2, 1
li t3, 64
.word 197549747
sub a2, a2, t4
mv t5, sp
.Lscalar_data_loop:
.word 205452119
# from this on, vector registers are grouped with lmul = 8
.word 33915911
.word 34539527
.word 780665943
.word 33883175
add a1, a1, t1
add a0, a0, t1
add t5, t5, t1
sub t4, t4, t1
bnez t4, .Lscalar_data_loop
bnez a2, .Lblock_loop
addi sp, sp, 64
ld s0, 0(sp)
ld s1, 8(sp)
ld s2, 16(sp)
ld s3, 24(sp)
ld s4, 32(sp)
ld s5, 40(sp)
ld s6, 48(sp)
ld s7, 56(sp)
ld s8, 64(sp)
ld s9, 72(sp)
ld s10, 80(sp)
ld s11, 88(sp)
addi sp, sp, 96
ret
.size ChaCha20_ctr32_v_zbb_zvkb,.-ChaCha20_ctr32_v_zbb_zvkb
@@ -0,0 +1,525 @@
.text
.p2align 3
.globl ChaCha20_ctr32_v_zbb
.type ChaCha20_ctr32_v_zbb,@function
ChaCha20_ctr32_v_zbb:
addi sp, sp, -96
sd s0, 0(sp)
sd s1, 8(sp)
sd s2, 16(sp)
sd s3, 24(sp)
sd s4, 32(sp)
sd s5, 40(sp)
sd s6, 48(sp)
sd s7, 56(sp)
sd s8, 64(sp)
sd s9, 72(sp)
sd s10, 80(sp)
sd s11, 88(sp)
addi sp, sp, -64
lw t2, 0(a4)
.Lblock_loop:
# We will use the scalar ALU for 1 chacha block.
srli t3, a2, 6
.word 219050839
slli t4, t1, 6
bltu t4, a2, 1f
# Since there is no more chacha block existed, we need to split 1 block
# from vector ALU.
addi t4, t1, -1
.word 219083607
1:
#### chacha block data
# init chacha const states into v0~v3
# "expa" little endian
li a5, 0x61707865
.word 1577566295
# "nd 3" little endian
li a6, 0x3320646e
.word 1577599191
# "2-by" little endian
li a7, 0x79622d32
.word 1577632087
# "te k" little endian
li s0, 0x6b206574
lw s1, 0(a3)
.word 1577337303
# init chacha key states into v4~v11
lw s2, 4(a3)
.word 1577370199
lw s3, 8(a3)
.word 1577665239
lw s4, 12(a3)
.word 1577698135
lw s5, 16(a3)
.word 1577731031
lw s6, 20(a3)
.word 1577763927
lw s7, 24(a3)
.word 1577796823
lw s8, 28(a3)
.word 1577829719
.word 1577862615
# init chacha key states into v12~v13
lw s10, 4(a4)
.word 1376298583
lw s11, 8(a4)
.word 46384727
lw t0, 12(a4)
.word 1577928407
add s9, t2, t1
# init chacha nonce states into v14~v15
.word 1577961303
.word 1577240535
li t3, 64
# load the top-half of input data into v16~v23
.word 3955615751
# till now in block_loop, we used:
# - v0~v15 for chacha states.
# - v16~v23 for top-half of input data.
# - v24~v31 haven't been used yet.
# 20 round groups
li t3, 10
.Lround_loop:
# we can use v24~v31 as temporary registers in round_loop.
addi t3, t3, -1
# a += b; d ^= a; d <<<= 16;
.word 33685591
add a5, a5, s1
.word 34767063
add a6, a6, s2
.word 35848535
add a7, a7, s3
.word 36930007
add s0, s0, s4
.word 784336471
xor s9, s9, a5
.word 785417943
xor s10, s10, a6
.word 786499415
xor s11, s11, a7
.word 787580887
xor t0, t0, s0
.word 2529705047
.word 2530753751
.word 2531802455
.word 2532851159
.word 2731030103
.word 2732078807
.word 2733127511
.word 2734176215
.word 718014039
.word 1628232859
.word 719095511
.word 1628265755
.word 720176983
.word 1628298651
.word 721258455
.word 1627574939
# c += d; b ^= c; b <<<= 12;
.word 42337367
add s5, s5, s9
.word 43418839
add s6, s6, s10
.word 44500311
add s7, s7, s11
.word 45581783
add s8, s8, t0
.word 776208983
xor s1, s1, s5
.word 777290455
xor s2, s2, s6
.word 778371927
xor s3, s3, s7
.word 779453399
xor s4, s4, s8
.word 2521185367
.word 2522234071
.word 2523282775
.word 2524331479
.word 2722771543
.word 2723820247
.word 2724868951
.word 2725917655
.word 709624407
.word 1631900827
.word 710705879
.word 1632196891
.word 711787351
.word 1632229787
.word 712868823
.word 1632262683
# a += b; d ^= a; d <<<= 8;
.word 33685591
add a5, a5, s1
.word 34767063
add a6, a6, s2
.word 35848535
add a7, a7, s3
.word 36930007
add s0, s0, s4
.word 784336471
xor s9, s9, a5
.word 785417943
xor s10, s10, a6
.word 786499415
xor s11, s11, a7
.word 787580887
xor t0, t0, s0
.word 2529442903
.word 2530491607
.word 2531540311
.word 2532589015
.word 2731292247
.word 2732340951
.word 2733389655
.word 2734438359
.word 718014039
.word 1636621467
.word 719095511
.word 1636654363
.word 720176983
.word 1636687259
.word 721258455
.word 1635963547
# c += d; b ^= c; b <<<= 7;
.word 42337367
add s5, s5, s9
.word 43418839
add s6, s6, s10
.word 44500311
add s7, s7, s11
.word 45581783
add s8, s8, t0
.word 776208983
xor s1, s1, s5
.word 777290455
xor s2, s2, s6
.word 778371927
xor s3, s3, s7
.word 779453399
xor s4, s4, s8
.word 2521021527
.word 2522070231
.word 2523118935
.word 2524167639
.word 2722935383
.word 2723984087
.word 2725032791
.word 2726081495
.word 709624407
.word 1637143707
.word 710705879
.word 1637439771
.word 711787351
.word 1637472667
.word 712868823
.word 1637505563
# a += b; d ^= a; d <<<= 16;
.word 36831703
add s0, s0, s1
.word 33718359
add a5, a5, s2
.word 34799831
add a6, a6, s3
.word 35881303
add a7, a7, s4
.word 786532183
xor s11, s11, s0
.word 787482583
xor t0, t0, a5
.word 784369239
xor s9, s9, a6
.word 785450711
xor s10, s10, a7
.word 2531802199
.word 2532850903
.word 2529705303
.word 2530754007
.word 2733127511
.word 2734176215
.word 2731030103
.word 2732078807
.word 720111447
.word 1628298651
.word 721192919
.word 1627574939
.word 718079575
.word 1628232859
.word 719161047
.word 1628265755
# c += d; b ^= c; b <<<= 12;
.word 43451607
add s6, s6, s11
.word 44533079
add s7, s7, t0
.word 45483479
add s8, s8, s9
.word 42370135
add s5, s5, s10
.word 776241751
xor s1, s1, s6
.word 777323223
xor s2, s2, s7
.word 778404695
xor s3, s3, s8
.word 779355095
xor s4, s4, s5
.word 2521185367
.word 2522234071
.word 2523282775
.word 2524331479
.word 2722771543
.word 2723820247
.word 2724868951
.word 2725917655
.word 709624407
.word 1631900827
.word 710705879
.word 1632196891
.word 711787351
.word 1632229787
.word 712868823
.word 1632262683
# a += b; d ^= a; d <<<= 8;
.word 36831703
add s0, s0, s1
.word 33718359
add a5, a5, s2
.word 34799831
add a6, a6, s3
.word 35881303
add a7, a7, s4
.word 786532183
xor s11, s11, s0
.word 787482583
xor t0, t0, a5
.word 784369239
xor s9, s9, a6
.word 785450711
xor s10, s10, a7
.word 2531540055
.word 2532588759
.word 2529443159
.word 2530491863
.word 2733389655
.word 2734438359
.word 2731292247
.word 2732340951
.word 720111447
.word 1636687259
.word 721192919
.word 1635963547
.word 718079575
.word 1636621467
.word 719161047
.word 1636654363
# c += d; b ^= c; b <<<= 7;
.word 43451607
add s6, s6, s11
.word 44533079
add s7, s7, t0
.word 45483479
add s8, s8, s9
.word 42370135
add s5, s5, s10
.word 776241751
xor s1, s1, s6
.word 777323223
xor s2, s2, s7
.word 778404695
xor s3, s3, s8
.word 779355095
xor s4, s4, s5
.word 2521021527
.word 2522070231
.word 2523118935
.word 2524167639
.word 2722935383
.word 2723984087
.word 2725032791
.word 2726081495
.word 709624407
.word 1637143707
.word 710705879
.word 1637439771
.word 711787351
.word 1637472667
.word 712868823
.word 1637505563
bnez t3, .Lround_loop
li t3, 64
# load the bottom-half of input data into v24~v31
addi t4, a1, 32
.word 3956206599
# now, there are no free vector registers until the round_loop exits.
# add chacha top-half initial block states
# "expa" little endian
li t3, 0x61707865
.word 34488407
add a5, a5, t3
# "nd 3" little endian
li t4, 0x3320646e
.word 35569879
add a6, a6, t4
lw t3, 0(a3)
# "2-by" little endian
li t5, 0x79622d32
.word 36651351
add a7, a7, t5
lw t4, 4(a3)
# "te k" little endian
li t6, 0x6b206574
.word 37732823
add s0, s0, t6
lw t5, 8(a3)
.word 38683223
add s1, s1, t3
lw t6, 12(a3)
.word 39764695
add s2, s2, t4
.word 40846167
add s3, s3, t5
.word 41927639
add s4, s4, t6
# xor with the top-half input
.word 788531287
sw a5, 0(sp)
sw a6, 4(sp)
.word 789612759
sw a7, 8(sp)
sw s0, 12(sp)
.word 790694231
sw s1, 16(sp)
sw s2, 20(sp)
.word 791775703
sw s3, 24(sp)
sw s4, 28(sp)
.word 792857175
lw t3, 16(a3)
.word 793938647
lw t4, 20(a3)
.word 795020119
lw t5, 24(a3)
.word 796101591
# save the top-half of output from v16~v23
li t6, 64
.word 3958728743
# add chacha bottom-half initial block states
.word 42878039
add s5, s5, t3
lw t6, 28(a3)
.word 43959511
add s6, s6, t4
lw t3, 4(a4)
.word 45040983
add s7, s7, t5
lw t4, 8(a4)
.word 46122455
add s8, s8, t6
lw t5, 12(a4)
.word 1376297047
add s9, s9, t2
.word 46384727
add s9, s9, t1
.word 48121559
add s10, s10, t3
.word 49203031
add s11, s11, t4
.word 50284503
add t0, t0, t5
.word 46138967
# xor with the bottom-half input
.word 797183063
sw s5, 32(sp)
.word 798264535
sw s6, 36(sp)
.word 799346007
sw s7, 40(sp)
.word 800427479
sw s8, 44(sp)
.word 802590423
sw s9, 48(sp)
.word 801508951
sw s10, 52(sp)
.word 803671895
sw s11, 56(sp)
.word 804753367
sw t0, 60(sp)
# save the bottom-half of output from v24~v31
li t3, 64
addi t4, a0, 32
.word 3956206631
# the computed vector parts: `64 * VL`
slli t3, t1, 6
add a1, a1, t3
add a0, a0, t3
sub a2, a2, t3
add t2, t2, t1
# process the scalar data block
addi t2, t2, 1
li t3, 64
.word 197549747
sub a2, a2, t4
mv t5, sp
.Lscalar_data_loop:
.word 205452119
# from this on, vector registers are grouped with lmul = 8
.word 33915911
.word 34539527
.word 780665943
.word 33883175
add a1, a1, t1
add a0, a0, t1
add t5, t5, t1
sub t4, t4, t1
bnez t4, .Lscalar_data_loop
bnez a2, .Lblock_loop
addi sp, sp, 64
ld s0, 0(sp)
ld s1, 8(sp)
ld s2, 16(sp)
ld s3, 24(sp)
ld s4, 32(sp)
ld s5, 40(sp)
ld s6, 48(sp)
ld s7, 56(sp)
ld s8, 64(sp)
ld s9, 72(sp)
ld s10, 80(sp)
ld s11, 88(sp)
addi sp, sp, 96
ret
.size ChaCha20_ctr32_v_zbb,.-ChaCha20_ctr32_v_zbb
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,268 @@
.text
.p2align 3
.globl gcm_init_rv64i_zvkb_zvbc
.type gcm_init_rv64i_zvkb_zvbc,@function
gcm_init_rv64i_zvkb_zvbc:
# Load/store data in reverse order.
# This is needed as a part of endianness swap.
add a1, a1, 8
li t0, -8
li t1, 63
la t2, Lpolymod
.word 0xc1817057 # vsetivli x0, 2, e64, m1, tu, mu
.word 173404295 # vlse64.v v1, (a1), t0
.word 33812743 # vle64.v v2, (t2)
# Shift one left and get the carry bits.
.word 2719171031 # vsrl.vx v3, v1, t1
.word 2517676247 # vsll.vi v1, v1, 1
# Use the fact that the polynomial degree is no more than 128,
# i.e. only the LSB of the upper half could be set.
# Thanks to this we don't need to do the full reduction here.
# Instead simply subtract the reduction polynomial.
# This idea was taken from x86 ghash implementation in OpenSSL.
.word 976269911 # vslideup.vi v4, v3, 1
.word 1043378647 # vslidedown.vi v3, v3, 1
.word 1577136215 # vmv.v.i v0, 2
.word 672268503 # vor.vv v1, v1, v4, v0.t
# Need to set the mask to 3, if the carry bit is set.
.word 1577156695 # vmv.v.v v0, v3
.word 1577071063 # vmv.v.i v3, 0
.word 1546760663 # vmerge.vim v3, v3, 3, v0
.word 1577156695 # vmv.v.v v0, v3
.word 739311831 # vxor.vv v1, v1, v2, v0.t
.word 33910951 # vse64.v v1, (a0)
ret
.size gcm_init_rv64i_zvkb_zvbc,.-gcm_init_rv64i_zvkb_zvbc
.text
.p2align 3
.globl gcm_gmult_rv64i_zvkb_zvbc
.type gcm_gmult_rv64i_zvkb_zvbc,@function
gcm_gmult_rv64i_zvkb_zvbc:
ld t0, (a1)
ld t1, 8(a1)
li t2, 63
la t3, Lpolymod
ld t3, 8(t3)
# Load/store data in reverse order.
# This is needed as a part of endianness swap.
add a0, a0, 8
li t4, -8
.word 0xc1817057 # vsetivli x0, 2, e64, m1, tu, mu
.word 198537863 # vlse64.v v5, (a0), t4
.word 1247060695 # vrev8.v v5, v5
# Multiplication
# Do two 64x64 multiplications in one go to save some time
# and simplify things.
# A = a1a0 (t1, t0)
# B = b1b0 (v5)
# C = c1c0 (256 bit)
# c1 = a1b1 + (a0b1)h + (a1b0)h
# c0 = a0b0 + (a0b1)l + (a1b0)h
# v1 = (a0b1)l,(a0b0)l
.word 844292311 # vclmul.vx v1, v5, t0
# v3 = (a0b1)h,(a0b0)h
.word 911401431 # vclmulh.vx v3, v5, t0
# v4 = (a1b1)l,(a1b0)l
.word 844325463 # vclmul.vx v4, v5, t1
# v2 = (a1b1)h,(a1b0)h
.word 911434071 # vclmulh.vx v2, v5, t1
# Is there a better way to do this?
# Would need to swap the order of elements within a vector register.
.word 976270039 # vslideup.vi v5, v3, 1
.word 977318743 # vslideup.vi v6, v4, 1
.word 1043378647 # vslidedown.vi v3, v3, 1
.word 1044427351 # vslidedown.vi v4, v4, 1
.word 1577103447 # vmv.v.i v0, 1
# v2 += (a0b1)h
.word 740393303 # vxor.vv v2, v2, v3, v0.t
# v2 += (a1b1)l
.word 740426071 # vxor.vv v2, v2, v4, v0.t
.word 1577136215 # vmv.v.i v0, 2
# v1 += (a0b0)h,0
.word 739410135 # vxor.vv v1, v1, v5, v0.t
# v1 += (a1b0)l,0
.word 739442903 # vxor.vv v1, v1, v6, v0.t
# Now the 256bit product should be stored in (v2,v1)
# v1 = (a0b1)l + (a0b0)h + (a1b0)l, (a0b0)l
# v2 = (a1b1)h, (a1b0)h + (a0b1)h + (a1b1)l
# Reduction
# Let C := A*B = c3,c2,c1,c0 = v2[1],v2[0],v1[1],v1[0]
# This is a slight variation of the Gueron's Montgomery reduction.
# The difference being the order of some operations has been changed,
# to make a better use of vclmul(h) instructions.
# First step:
# c1 += (c0 * P)l
# vmv.v.i v0, 2
.word 940618199 # vslideup.vi v3, v1, 1, v0.t
.word 809394647 # vclmul.vx v3, v3, t3, v0.t
.word 739344599 # vxor.vv v1, v1, v3, v0.t
# Second step:
# D = d1,d0 is final result
# We want:
# m1 = c1 + (c1 * P)h
# m0 = (c1 * P)l + (c0 * P)h + c0
# d1 = c3 + m1
# d0 = c2 + m0
#v3 = (c1 * P)l, 0
.word 807297495 # vclmul.vx v3, v1, t3, v0.t
#v4 = (c1 * P)h, (c0 * P)h
.word 907960919 # vclmulh.vx v4, v1, t3
.word 1577103447 # vmv.v.i v0, 1
.word 1043378647 # vslidedown.vi v3, v3, 1
.word 772931799 # vxor.vv v1, v1, v4
.word 739344599 # vxor.vv v1, v1, v3, v0.t
# XOR in the upper upper part of the product
.word 773882199 # vxor.vv v2, v2, v1
.word 1243914583 # vrev8.v v2, v2
.word 198537511 # vsse64.v v2, (a0), t4
ret
.size gcm_gmult_rv64i_zvkb_zvbc,.-gcm_gmult_rv64i_zvkb_zvbc
.p2align 3
.globl gcm_ghash_rv64i_zvkb_zvbc
.type gcm_ghash_rv64i_zvkb_zvbc,@function
gcm_ghash_rv64i_zvkb_zvbc:
ld t0, (a1)
ld t1, 8(a1)
li t2, 63
la t3, Lpolymod
ld t3, 8(t3)
# Load/store data in reverse order.
# This is needed as a part of endianness swap.
add a0, a0, 8
add a2, a2, 8
li t4, -8
.word 0xc1817057 # vsetivli x0, 2, e64, m1, tu, mu
.word 198537863 # vlse64.v v5, (a0), t4
Lstep:
# Read input data
.word 198603655 # vle64.v v0, (a2)
add a2, a2, 16
add a3, a3, -16
# XOR them into Xi
.word 777224919 # vxor.vv v0, v0, v1
.word 1247060695 # vrev8.v v5, v5
# Multiplication
# Do two 64x64 multiplications in one go to save some time
# and simplify things.
# A = a1a0 (t1, t0)
# B = b1b0 (v5)
# C = c1c0 (256 bit)
# c1 = a1b1 + (a0b1)h + (a1b0)h
# c0 = a0b0 + (a0b1)l + (a1b0)h
# v1 = (a0b1)l,(a0b0)l
.word 844292311 # vclmul.vx v1, v5, t0
# v3 = (a0b1)h,(a0b0)h
.word 911401431 # vclmulh.vx v3, v5, t0
# v4 = (a1b1)l,(a1b0)l
.word 844325463 # vclmul.vx v4, v5, t1
# v2 = (a1b1)h,(a1b0)h
.word 911434071 # vclmulh.vx v2, v5, t1
# Is there a better way to do this?
# Would need to swap the order of elements within a vector register.
.word 976270039 # vslideup.vi v5, v3, 1
.word 977318743 # vslideup.vi v6, v4, 1
.word 1043378647 # vslidedown.vi v3, v3, 1
.word 1044427351 # vslidedown.vi v4, v4, 1
.word 1577103447 # vmv.v.i v0, 1
# v2 += (a0b1)h
.word 740393303 # vxor.vv v2, v2, v3, v0.t
# v2 += (a1b1)l
.word 740426071 # vxor.vv v2, v2, v4, v0.t
.word 1577136215 # vmv.v.i v0, 2
# v1 += (a0b0)h,0
.word 739410135 # vxor.vv v1, v1, v5, v0.t
# v1 += (a1b0)l,0
.word 739442903 # vxor.vv v1, v1, v6, v0.t
# Now the 256bit product should be stored in (v2,v1)
# v1 = (a0b1)l + (a0b0)h + (a1b0)l, (a0b0)l
# v2 = (a1b1)h, (a1b0)h + (a0b1)h + (a1b1)l
# Reduction
# Let C := A*B = c3,c2,c1,c0 = v2[1],v2[0],v1[1],v1[0]
# This is a slight variation of the Gueron's Montgomery reduction.
# The difference being the order of some operations has been changed,
# to make a better use of vclmul(h) instructions.
# First step:
# c1 += (c0 * P)l
# vmv.v.i v0, 2
.word 940618199 # vslideup.vi v3, v1, 1, v0.t
.word 809394647 # vclmul.vx v3, v3, t3, v0.t
.word 739344599 # vxor.vv v1, v1, v3, v0.t
# Second step:
# D = d1,d0 is final result
# We want:
# m1 = c1 + (c1 * P)h
# m0 = (c1 * P)l + (c0 * P)h + c0
# d1 = c3 + m1
# d0 = c2 + m0
#v3 = (c1 * P)l, 0
.word 807297495 # vclmul.vx v3, v1, t3, v0.t
#v4 = (c1 * P)h, (c0 * P)h
.word 907960919 # vclmulh.vx v4, v1, t3
.word 1577103447 # vmv.v.i v0, 1
.word 1043378647 # vslidedown.vi v3, v3, 1
.word 772931799 # vxor.vv v1, v1, v4
.word 739344599 # vxor.vv v1, v1, v3, v0.t
# XOR in the upper upper part of the product
.word 773882199 # vxor.vv v2, v2, v1
.word 1243914967 # vrev8.v v2, v2
bnez a3, Lstep
.word 198537895 # vsse64.v v2, (a0), t4
ret
.size gcm_ghash_rv64i_zvkb_zvbc,.-gcm_ghash_rv64i_zvkb_zvbc
.p2align 4
Lpolymod:
.dword 0x0000000000000001
.dword 0xc200000000000000
.size Lpolymod,.-Lpolymod
@@ -0,0 +1,81 @@
.text
.p2align 3
.globl gcm_init_rv64i_zvkg
.type gcm_init_rv64i_zvkg,@function
gcm_init_rv64i_zvkg:
ld a2, 0(a1)
ld a3, 8(a1)
sb a2, 7(a0)
srli t0, a2, 8
sb t0, 6(a0)
srli t0, a2, 16
sb t0, 5(a0)
srli t0, a2, 24
sb t0, 4(a0)
srli t0, a2, 32
sb t0, 3(a0)
srli t0, a2, 40
sb t0, 2(a0)
srli t0, a2, 48
sb t0, 1(a0)
srli t0, a2, 56
sb t0, 0(a0)
sb a3, 15(a0)
srli t0, a3, 8
sb t0, 14(a0)
srli t0, a3, 16
sb t0, 13(a0)
srli t0, a3, 24
sb t0, 12(a0)
srli t0, a3, 32
sb t0, 11(a0)
srli t0, a3, 40
sb t0, 10(a0)
srli t0, a3, 48
sb t0, 9(a0)
srli t0, a3, 56
sb t0, 8(a0)
ret
.size gcm_init_rv64i_zvkg,.-gcm_init_rv64i_zvkg
.p2align 3
.globl gcm_init_rv64i_zvkg_zvkb
.type gcm_init_rv64i_zvkg_zvkb,@function
gcm_init_rv64i_zvkg_zvkb:
.word 0xc1817057 # vsetivli x0, 2, e64, m1, ta, ma
.word 33943559 # vle64.v v0, (a1)
.word 1241817175 # vrev8.v v0, v0
.word 33910823 # vse64.v v0, (a0)
ret
.size gcm_init_rv64i_zvkg_zvkb,.-gcm_init_rv64i_zvkg_zvkb
.p2align 3
.globl gcm_gmult_rv64i_zvkg
.type gcm_gmult_rv64i_zvkg,@function
gcm_gmult_rv64i_zvkg:
.word 0xc1027057
.word 33939719
.word 33906823
.word 2720571639
.word 33906855
ret
.size gcm_gmult_rv64i_zvkg,.-gcm_gmult_rv64i_zvkg
.p2align 3
.globl gcm_ghash_rv64i_zvkg
.type gcm_ghash_rv64i_zvkg,@function
gcm_ghash_rv64i_zvkg:
.word 0xc1027057
.word 33939719
.word 33906823
Lstep:
.word 33972615
add a2, a2, 16
add a3, a3, -16
.word 2988548343
bnez a3, Lstep
.word 33906855
ret
.size gcm_ghash_rv64i_zvkg,.-gcm_ghash_rv64i_zvkg
@@ -0,0 +1,613 @@
.text
.p2align 3
.globl gcm_init_rv64i_zbc
.type gcm_init_rv64i_zbc,@function
gcm_init_rv64i_zbc:
ld a2,0(a1)
ld a3,8(a1)
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a2, 1
and t1, t1, t0
and a2, a2, t0
srli a2, a2, 1
or a2, t1, a2
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a2, 2
and t1, t1, t0
and a2, a2, t0
srli a2, a2, 2
or a2, t1, a2
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a2, 4
and t1, t1, t0
and a2, a2, t0
srli a2, a2, 4
or a2, t1, a2
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a3, 1
and t1, t1, t0
and a3, a3, t0
srli a3, a3, 1
or a3, t1, a3
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a3, 2
and t1, t1, t0
and a3, a3, t0
srli a3, a3, 2
or a3, t1, a3
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a3, 4
and t1, t1, t0
and a3, a3, t0
srli a3, a3, 4
or a3, t1, a3
sb a2, 7(a0)
srli t0, a2, 8
sb t0, 6(a0)
srli t0, a2, 16
sb t0, 5(a0)
srli t0, a2, 24
sb t0, 4(a0)
srli t0, a2, 32
sb t0, 3(a0)
srli t0, a2, 40
sb t0, 2(a0)
srli t0, a2, 48
sb t0, 1(a0)
srli t0, a2, 56
sb t0, 0(a0)
sb a3, 15(a0)
srli t0, a3, 8
sb t0, 14(a0)
srli t0, a3, 16
sb t0, 13(a0)
srli t0, a3, 24
sb t0, 12(a0)
srli t0, a3, 32
sb t0, 11(a0)
srli t0, a3, 40
sb t0, 10(a0)
srli t0, a3, 48
sb t0, 9(a0)
srli t0, a3, 56
sb t0, 8(a0)
ret
.size gcm_init_rv64i_zbc,.-gcm_init_rv64i_zbc
.p2align 3
.globl gcm_init_rv64i_zbc__zbb
.type gcm_init_rv64i_zbc__zbb,@function
gcm_init_rv64i_zbc__zbb:
ld a2,0(a1)
ld a3,8(a1)
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a2, 1
and t1, t1, t0
and a2, a2, t0
srli a2, a2, 1
or a2, t1, a2
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a2, 2
and t1, t1, t0
and a2, a2, t0
srli a2, a2, 2
or a2, t1, a2
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a2, 4
and t1, t1, t0
and a2, a2, t0
srli a2, a2, 4
or a2, t1, a2
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a3, 1
and t1, t1, t0
and a3, a3, t0
srli a3, a3, 1
or a3, t1, a3
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a3, 2
and t1, t1, t0
and a3, a3, t0
srli a3, a3, 2
or a3, t1, a3
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a3, 4
and t1, t1, t0
and a3, a3, t0
srli a3, a3, 4
or a3, t1, a3
.word 1803965971
.word 1803998867
sd a2,0(a0)
sd a3,8(a0)
ret
.size gcm_init_rv64i_zbc__zbb,.-gcm_init_rv64i_zbc__zbb
.p2align 3
.globl gcm_init_rv64i_zbc__zbkb
.type gcm_init_rv64i_zbc__zbkb,@function
gcm_init_rv64i_zbc__zbkb:
ld t0,0(a1)
ld t1,8(a1)
.word 1752355475
.word 1752388371
.word 1803735699
.word 1803768595
sd t0,0(a0)
sd t1,8(a0)
ret
.size gcm_init_rv64i_zbc__zbkb,.-gcm_init_rv64i_zbc__zbkb
.p2align 3
.globl gcm_gmult_rv64i_zbc
.type gcm_gmult_rv64i_zbc,@function
gcm_gmult_rv64i_zbc:
# Load Xi and bit-reverse it
ld a4, 0(a0)
ld a5, 8(a0)
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a4, 1
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 1
or a4, t1, a4
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a4, 2
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 2
or a4, t1, a4
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a4, 4
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 4
or a4, t1, a4
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a5, 1
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 1
or a5, t1, a5
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a5, 2
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 2
or a5, t1, a5
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a5, 4
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 4
or a5, t1, a5
# Load the key (already bit-reversed)
ld a6, 0(a1)
ld a7, 8(a1)
# Load the reduction constant
la t6, Lpolymod
lbu t6, 0(t6)
# Multiplication (without Karatsuba)
.word 186105395
.word 186094515
.word 186072883
.word 186061619
xor t2, t2, t5
.word 185057075
.word 185048755
xor t2, t2, t5
xor t1, t1, t4
.word 185024307
.word 185012915
xor t1, t1, t5
# Reduction with clmul
.word 201211699
.word 201203379
xor t2, t2, t5
xor t1, t1, t4
.word 200523571
.word 200515251
xor a5, t1, t5
xor a4, t0, t4
# Bit-reverse Xi back and store it
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a4, 1
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 1
or a4, t1, a4
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a4, 2
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 2
or a4, t1, a4
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a4, 4
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 4
or a4, t1, a4
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a5, 1
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 1
or a5, t1, a5
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a5, 2
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 2
or a5, t1, a5
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a5, 4
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 4
or a5, t1, a5
sd a4, 0(a0)
sd a5, 8(a0)
ret
.size gcm_gmult_rv64i_zbc,.-gcm_gmult_rv64i_zbc
.p2align 3
.globl gcm_gmult_rv64i_zbc__zbkb
.type gcm_gmult_rv64i_zbc__zbkb,@function
gcm_gmult_rv64i_zbc__zbkb:
# Load Xi and bit-reverse it
ld a4, 0(a0)
ld a5, 8(a0)
.word 1752651539
.word 1752684435
# Load the key (already bit-reversed)
ld a6, 0(a1)
ld a7, 8(a1)
# Load the reduction constant
la t6, Lpolymod
lbu t6, 0(t6)
# Multiplication (without Karatsuba)
.word 186105395
.word 186094515
.word 186072883
.word 186061619
xor t2, t2, t5
.word 185057075
.word 185048755
xor t2, t2, t5
xor t1, t1, t4
.word 185024307
.word 185012915
xor t1, t1, t5
# Reduction with clmul
.word 201211699
.word 201203379
xor t2, t2, t5
xor t1, t1, t4
.word 200523571
.word 200515251
xor a5, t1, t5
xor a4, t0, t4
# Bit-reverse Xi back and store it
.word 1752651539
.word 1752684435
sd a4, 0(a0)
sd a5, 8(a0)
ret
.size gcm_gmult_rv64i_zbc__zbkb,.-gcm_gmult_rv64i_zbc__zbkb
.p2align 3
.globl gcm_ghash_rv64i_zbc
.type gcm_ghash_rv64i_zbc,@function
gcm_ghash_rv64i_zbc:
# Load Xi and bit-reverse it
ld a4, 0(a0)
ld a5, 8(a0)
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a4, 1
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 1
or a4, t1, a4
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a4, 2
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 2
or a4, t1, a4
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a4, 4
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 4
or a4, t1, a4
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a5, 1
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 1
or a5, t1, a5
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a5, 2
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 2
or a5, t1, a5
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a5, 4
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 4
or a5, t1, a5
# Load the key (already bit-reversed)
ld a6, 0(a1)
ld a7, 8(a1)
# Load the reduction constant
la t6, Lpolymod
lbu t6, 0(t6)
Lstep:
# Load the input data, bit-reverse them, and XOR them with Xi
ld t4, 0(a2)
ld t5, 8(a2)
add a2, a2, 16
add a3, a3, -16
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, t4, 1
and t1, t1, t0
and t4, t4, t0
srli t4, t4, 1
or t4, t1, t4
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, t4, 2
and t1, t1, t0
and t4, t4, t0
srli t4, t4, 2
or t4, t1, t4
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, t4, 4
and t1, t1, t0
and t4, t4, t0
srli t4, t4, 4
or t4, t1, t4
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, t5, 1
and t1, t1, t0
and t5, t5, t0
srli t5, t5, 1
or t5, t1, t5
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, t5, 2
and t1, t1, t0
and t5, t5, t0
srli t5, t5, 2
or t5, t1, t5
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, t5, 4
and t1, t1, t0
and t5, t5, t0
srli t5, t5, 4
or t5, t1, t5
xor a4, a4, t4
xor a5, a5, t5
# Multiplication (without Karatsuba)
.word 186105395
.word 186094515
.word 186072883
.word 186061619
xor t2, t2, t5
.word 185057075
.word 185048755
xor t2, t2, t5
xor t1, t1, t4
.word 185024307
.word 185012915
xor t1, t1, t5
# Reduction with clmul
.word 201211699
.word 201203379
xor t2, t2, t5
xor t1, t1, t4
.word 200523571
.word 200515251
xor a5, t1, t5
xor a4, t0, t4
# Iterate over all blocks
bnez a3, Lstep
# Bit-reverse final Xi back and store it
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a4, 1
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 1
or a4, t1, a4
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a4, 2
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 2
or a4, t1, a4
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a4, 4
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 4
or a4, t1, a4
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a5, 1
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 1
or a5, t1, a5
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a5, 2
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 2
or a5, t1, a5
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a5, 4
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 4
or a5, t1, a5
sd a4, 0(a0)
sd a5, 8(a0)
ret
.size gcm_ghash_rv64i_zbc,.-gcm_ghash_rv64i_zbc
.p2align 3
.globl gcm_ghash_rv64i_zbc__zbkb
.type gcm_ghash_rv64i_zbc__zbkb,@function
gcm_ghash_rv64i_zbc__zbkb:
# Load Xi and bit-reverse it
ld a4, 0(a0)
ld a5, 8(a0)
.word 1752651539
.word 1752684435
# Load the key (already bit-reversed)
ld a6, 0(a1)
ld a7, 8(a1)
# Load the reduction constant
la t6, Lpolymod
lbu t6, 0(t6)
Lstep_zkbk:
# Load the input data, bit-reverse them, and XOR them with Xi
ld t4, 0(a2)
ld t5, 8(a2)
add a2, a2, 16
add a3, a3, -16
.word 1753144979
.word 1753177875
xor a4, a4, t4
xor a5, a5, t5
# Multiplication (without Karatsuba)
.word 186105395
.word 186094515
.word 186072883
.word 186061619
xor t2, t2, t5
.word 185057075
.word 185048755
xor t2, t2, t5
xor t1, t1, t4
.word 185024307
.word 185012915
xor t1, t1, t5
# Reduction with clmul
.word 201211699
.word 201203379
xor t2, t2, t5
xor t1, t1, t4
.word 200523571
.word 200515251
xor a5, t1, t5
xor a4, t0, t4
# Iterate over all blocks
bnez a3, Lstep_zkbk
# Bit-reverse final Xi back and store it
.word 1752651539
.word 1752684435
sd a4, 0(a0)
sd a5, 8(a0)
ret
.size gcm_ghash_rv64i_zbc__zbkb,.-gcm_ghash_rv64i_zbc__zbkb
.p2align 3
Lbrev8_const:
.dword 0xAAAAAAAAAAAAAAAA
.dword 0xCCCCCCCCCCCCCCCC
.dword 0xF0F0F0F0F0F0F0F0
.size Lbrev8_const,.-Lbrev8_const
Lpolymod:
.byte 0x87
.size Lpolymod,.-Lpolymod
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,71 @@
################################################################################
# int CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len)
################################################################################
.text
.balign 16
.globl CRYPTO_memcmp
.type CRYPTO_memcmp,@function
CRYPTO_memcmp:
li t0,0
beqz a2,2f # len == 0
1:
lbu t1,0(a0)
lbu t2,0(a1)
addi a0,a0,1
addi a1,a1,1
addi a2,a2,-1
xor t1,t1,t2
or t0,t0,t1
bgtz a2,1b
2:
mv a0,t0
ret
################################################################################
# void OPENSSL_cleanse(void *ptr, size_t len)
################################################################################
.text
.balign 16
.globl OPENSSL_cleanse
.type OPENSSL_cleanse,@function
OPENSSL_cleanse:
beqz a1,2f # len == 0, return
srli t0,a1,4
bnez t0,3f # len > 15
1: # Store <= 15 individual bytes
sb x0,0(a0)
addi a0,a0,1
addi a1,a1,-1
bnez a1,1b
2:
ret
3: # Store individual bytes until we are aligned
andi t0,a0,0x7
beqz t0,4f
sb x0,0(a0)
addi a0,a0,1
addi a1,a1,-1
j 3b
4: # Store aligned dwords
li t1,8
4:
sd x0,0(a0)
addi a0,a0,8
addi a1,a1,-8
bge a1,t1,4b # if len>=8 loop
bnez a1,1b # if len<8 and len != 0, store remaining bytes
ret
################################################################################
# size_t riscv_vlen_asm(void)
# Return VLEN (i.e. the length of a vector register in bits).
.p2align 3
.globl riscv_vlen_asm
.type riscv_vlen_asm,@function
riscv_vlen_asm:
# 0xc22 is CSR vlenb
csrr a0, 0xc22
slli a0, a0, 3
ret
.size riscv_vlen_asm,.-riscv_vlen_asm
@@ -0,0 +1,229 @@
.text
.p2align 2
.globl sha256_block_data_order_zvkb_zvknha_or_zvknhb
.type sha256_block_data_order_zvkb_zvknha_or_zvknhb,@function
sha256_block_data_order_zvkb_zvknha_or_zvknhb:
.word 3439489111
la a3, K256 # Load round constants K256
.word 34006279
addi a3, a3, 16
.word 34006407
addi a3, a3, 16
.word 34006535
addi a3, a3, 16
.word 34006663
addi a3, a3, 16
.word 34006791
addi a3, a3, 16
.word 34006919
addi a3, a3, 16
.word 34007047
addi a3, a3, 16
.word 34007175
addi a3, a3, 16
.word 34007303
addi a3, a3, 16
.word 34007431
addi a3, a3, 16
.word 34007559
addi a3, a3, 16
.word 34007687
addi a3, a3, 16
.word 34007815
addi a3, a3, 16
.word 34007943
addi a3, a3, 16
.word 34008071
addi a3, a3, 16
.word 34008199
# H is stored as {a,b,c,d},{e,f,g,h}, but we need {f,e,b,a},{h,g,d,c}
# The dst vtype is e32m1 and the index vtype is e8mf4.
# We use index-load with the following index pattern at v26.
# i8 index:
# 20, 16, 4, 0
# Instead of setting the i8 index, we could use a single 32bit
# little-endian value to cover the 4xi8 index.
# i32 value:
# 0x 00 04 10 14
li t4, 0x00041014
.word 3439390807
.word 1578028375
addi t3, a0, 8
# Use index-load to get {f,e,b,a},{h,g,d,c}
.word 3439489111
.word 128254727
.word 128844679
# Setup v0 mask for the vmerge to replace the first word (idx==0) in key-scheduling.
# The AVL is 4 in SHA, so we could use a single e8(8 element masking) for masking.
.word 3422613591
.word 1577103447
.word 3439489111
L_round_loop:
# Decrement length by 1
add a2, a2, -1
# Keep the current state as we need it later: H' = H+{a',b',c',...,h'}.
.word 1577258839
.word 1577291735
# Load the 512-bits of the message block in v1-v4 and perform
# an endian swap on each 4 bytes element.
.word 33939591
.word 1242865879
add a1, a1, 16
.word 33939719
.word 1243914583
add a1, a1, 16
.word 33939847
.word 1244963287
add a1, a1, 16
.word 33939975
.word 1246011991
add a1, a1, 16
# Quad-round 0 (+0, Wt from oldest to newest in v1->v2->v3->v4)
.word 44073687
.word 3194135543
.word 3128075127
.word 1546715863
.word 3058835703 # Generate W[19:16]
# Quad-round 1 (+1, v2->v3->v4->v1)
.word 45155031
.word 3194135543
.word 3128075127
.word 1547797207
.word 3058737527 # Generate W[23:20]
# Quad-round 2 (+2, v3->v4->v1->v2)
.word 46236375
.word 3194135543
.word 3128075127
.word 1544684247
.word 3058770423 # Generate W[27:24]
# Quad-round 3 (+3, v4->v1->v2->v3)
.word 47317719
.word 3194135543
.word 3128075127
.word 1545634519
.word 3058803319 # Generate W[31:28]
# Quad-round 4 (+0, v1->v2->v3->v4)
.word 48267991
.word 3194135543
.word 3128075127
.word 1546715863
.word 3058835703 # Generate W[35:32]
# Quad-round 5 (+1, v2->v3->v4->v1)
.word 49349335
.word 3194135543
.word 3128075127
.word 1547797207
.word 3058737527 # Generate W[39:36]
# Quad-round 6 (+2, v3->v4->v1->v2)
.word 50430679
.word 3194135543
.word 3128075127
.word 1544684247
.word 3058770423 # Generate W[43:40]
# Quad-round 7 (+3, v4->v1->v2->v3)
.word 51512023
.word 3194135543
.word 3128075127
.word 1545634519
.word 3058803319 # Generate W[47:44]
# Quad-round 8 (+0, v1->v2->v3->v4)
.word 52462295
.word 3194135543
.word 3128075127
.word 1546715863
.word 3058835703 # Generate W[51:48]
# Quad-round 9 (+1, v2->v3->v4->v1)
.word 53543639
.word 3194135543
.word 3128075127
.word 1547797207
.word 3058737527 # Generate W[55:52]
# Quad-round 10 (+2, v3->v4->v1->v2)
.word 54624983
.word 3194135543
.word 3128075127
.word 1544684247
.word 3058770423 # Generate W[59:56]
# Quad-round 11 (+3, v4->v1->v2->v3)
.word 55706327
.word 3194135543
.word 3128075127
.word 1545634519
.word 3058803319 # Generate W[63:60]
# Quad-round 12 (+0, v1->v2->v3->v4)
# Note that we stop generating new message schedule words (Wt, v1-13)
# as we already generated all the words we end up consuming (i.e., W[63:60]).
.word 56656599
.word 3194135543
.word 3128075127
# Quad-round 13 (+1, v2->v3->v4->v1)
.word 57737943
.word 3194135543
.word 3128075127
# Quad-round 14 (+2, v3->v4->v1->v2)
.word 58819287
.word 3194135543
.word 3128075127
# Quad-round 15 (+3, v4->v1->v2->v3)
.word 59900631
.word 3194135543
.word 3128075127
# H' = H+{a',b',c',...,h'}
.word 65209175
.word 66290647
bnez a2, L_round_loop
# Store {f,e,b,a},{h,g,d,c} back to {a,b,c,d},{e,f,g,h}.
.word 128254759
.word 128844711
ret
.size sha256_block_data_order_zvkb_zvknha_or_zvknhb,.-sha256_block_data_order_zvkb_zvknha_or_zvknhb
.p2align 2
.type K256,@object
K256:
.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
.size K256,.-K256
@@ -0,0 +1,184 @@
.text
.p2align 2
.globl sha512_block_data_order_zvkb_zvknhb
.type sha512_block_data_order_zvkb_zvknhb,@function
sha512_block_data_order_zvkb_zvknhb:
.word 3448926295
# H is stored as {a,b,c,d},{e,f,g,h}, but we need {f,e,b,a},{h,g,d,c}
# The dst vtype is e64m2 and the index vtype is e8mf4.
# We use index-load with the following index pattern at v1.
# i8 index:
# 40, 32, 8, 0
# Instead of setting the i8 index, we could use a single 32bit
# little-endian value to cover the 4xi8 index.
# i32 value:
# 0x 00 08 20 28
li t4, 0x00082028
.word 3439390807
.word 1578025175
addi t3, a0, 16
# Use index-load to get {f,e,b,a},{h,g,d,c}
.word 3448926295
.word 102042375
.word 102632455
# Setup v0 mask for the vmerge to replace the first word (idx==0) in key-scheduling.
# The AVL is 4 in SHA, so we could use a single e8(8 element masking) for masking.
.word 3422613591
.word 1577103447
.word 3448926295
L_round_loop:
# Load round constants K512
la a3, K512
# Decrement length by 1
addi a2, a2, -1
# Keep the current state as we need it later: H' = H+{a',b',c',...,h'}.
.word 1577782615
.word 1577848407
# Load the 1024-bits of the message block in v10-v16 and perform the endian
# swap.
.word 33944839
.word 1252304215
addi a1, a1, 32
.word 33945095
.word 1254401623
addi a1, a1, 32
.word 33945351
.word 1256499031
addi a1, a1, 32
.word 33945607
.word 1258596439
addi a1, a1, 32
.rept 4
# Quad-round 0 (+0, v10->v12->v14->v16)
.word 34011655
addi a3, a3, 32
.word 54856023
.word 3211340919
.word 3146328951
.word 1558579543
.word 3072861559
# Quad-round 1 (+1, v12->v14->v16->v10)
.word 34011655
addi a3, a3, 32
.word 54921559
.word 3211340919
.word 3146328951
.word 1560742231
.word 3072665207
# Quad-round 2 (+2, v14->v16->v10->v12)
.word 34011655
addi a3, a3, 32
.word 54987095
.word 3211340919
.word 3146328951
.word 1554516311
.word 3072730999
# Quad-round 3 (+3, v16->v10->v12->v14)
.word 34011655
addi a3, a3, 32
.word 55052631
.word 3211340919
.word 3146328951
.word 1556416855
.word 3072796791
.endr
# Quad-round 16 (+0, v10->v12->v14->v16)
# Note that we stop generating new message schedule words (Wt, v10-16)
# as we already generated all the words we end up consuming (i.e., W[79:76]).
.word 34011655
addi a3, a3, 32
.word 54856023
.word 3211340919
.word 3146328951
# Quad-round 17 (+1, v12->v14->v16->v10)
.word 34011655
addi a3, a3, 32
.word 54921559
.word 3211340919
.word 3146328951
# Quad-round 18 (+2, v14->v16->v10->v12)
.word 34011655
addi a3, a3, 32
.word 54987095
.word 3211340919
.word 3146328951
# Quad-round 19 (+3, v16->v10->v12->v14)
.word 34011655
# No t1 increment needed.
.word 55052631
.word 3211340919
.word 3146328951
# H' = H+{a',b',c',...,h'}
.word 61541207
.word 63704151
bnez a2, L_round_loop
# Store {f,e,b,a},{h,g,d,c} back to {a,b,c,d},{e,f,g,h}.
.word 102042407
.word 102632487
ret
.size sha512_block_data_order_zvkb_zvknhb,.-sha512_block_data_order_zvkb_zvknhb
.p2align 3
.type K512,@object
K512:
.dword 0x428a2f98d728ae22, 0x7137449123ef65cd
.dword 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc
.dword 0x3956c25bf348b538, 0x59f111f1b605d019
.dword 0x923f82a4af194f9b, 0xab1c5ed5da6d8118
.dword 0xd807aa98a3030242, 0x12835b0145706fbe
.dword 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2
.dword 0x72be5d74f27b896f, 0x80deb1fe3b1696b1
.dword 0x9bdc06a725c71235, 0xc19bf174cf692694
.dword 0xe49b69c19ef14ad2, 0xefbe4786384f25e3
.dword 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65
.dword 0x2de92c6f592b0275, 0x4a7484aa6ea6e483
.dword 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5
.dword 0x983e5152ee66dfab, 0xa831c66d2db43210
.dword 0xb00327c898fb213f, 0xbf597fc7beef0ee4
.dword 0xc6e00bf33da88fc2, 0xd5a79147930aa725
.dword 0x06ca6351e003826f, 0x142929670a0e6e70
.dword 0x27b70a8546d22ffc, 0x2e1b21385c26c926
.dword 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df
.dword 0x650a73548baf63de, 0x766a0abb3c77b2a8
.dword 0x81c2c92e47edaee6, 0x92722c851482353b
.dword 0xa2bfe8a14cf10364, 0xa81a664bbc423001
.dword 0xc24b8b70d0f89791, 0xc76c51a30654be30
.dword 0xd192e819d6ef5218, 0xd69906245565a910
.dword 0xf40e35855771202a, 0x106aa07032bbd1b8
.dword 0x19a4c116b8d2d0c8, 0x1e376c085141ab53
.dword 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8
.dword 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb
.dword 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3
.dword 0x748f82ee5defb2fc, 0x78a5636f43172f60
.dword 0x84c87814a1f0ab72, 0x8cc702081a6439ec
.dword 0x90befffa23631e28, 0xa4506cebde82bde9
.dword 0xbef9a3f7b2c67915, 0xc67178f2e372532b
.dword 0xca273eceea26619c, 0xd186b8c721c0c207
.dword 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178
.dword 0x06f067aa72176fba, 0x0a637dc5a2c898a6
.dword 0x113f9804bef90dae, 0x1b710b35131c471b
.dword 0x28db77f523047d84, 0x32caab7b40c72493
.dword 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c
.dword 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a
.dword 0x5fcb6fab3ad6faec, 0x6c44198c4a475817
.size K512,.-K512
@@ -0,0 +1,150 @@
.text
.text
.p2align 3
.globl ossl_hwsm3_block_data_order_zvksh
.type ossl_hwsm3_block_data_order_zvksh,@function
ossl_hwsm3_block_data_order_zvksh:
.word 3440668759
# Load initial state of hash context (c->A-H).
.word 33906695
.word 1241817175
L_sm3_loop:
# Copy the previous state to v2.
# It will be XOR'ed with the current state at the end of the round.
.word 1577058647
# Load the 64B block in 2x32B chunks.
.word 33940231 # v6 := {w7, ..., w0}
addi a1, a1, 32
.word 33940487 # v8 := {w15, ..., w8}
addi a1, a1, 32
addi a2, a2, -1
# As vsm3c consumes only w0, w1, w4, w5 we need to slide the input
# 2 elements down so we process elements w2, w3, w6, w7
# This will be repeated for each odd round.
.word 1046557271 # v4 := {X, X, w7, ..., w2}
.word 2925535351
.word 2923470967
# Prepare a vector with {w11, ..., w4}
.word 1044460119 # v4 := {X, X, X, X, w7, ..., w4}
.word 981611095 # v4 := {w11, w10, w9, w8, w7, w6, w5, w4}
.word 2923503735
.word 1044460119 # v4 := {X, X, w11, w10, w9, w8, w7, w6}
.word 2923536503
.word 2927763575
.word 1048654423 # v4 := {X, X, w15, w14, w13, w12, w11, w10}
.word 2923602039
.word 2189632375 # v6 := {w23, w22, w21, w20, w19, w18, w17, w16}
# Prepare a register with {w19, w18, w17, w16, w15, w14, w13, w12}
.word 1044460119 # v4 := {X, X, X, X, w15, w14, w13, w12}
.word 979513943 # v4 := {w19, w18, w17, w16, w15, w14, w13, w12}
.word 2923634807
.word 1044460119 # v4 := {X, X, w19, w18, w17, w16, w15, w14}
.word 2923667575
.word 2925797495
.word 1046557271 # v4 := {X, X, w23, w22, w21, w20, w19, w18}
.word 2923733111
.word 2187601015 # v8 := {w31, w30, w29, w28, w27, w26, w25, w24}
# Prepare a register with {w27, w26, w25, w24, w23, w22, w21, w20}
.word 1044460119 # v4 := {X, X, X, X, w23, w22, w21, w20}
.word 981611095 # v4 := {w27, w26, w25, w24, w23, w22, w21, w20}
.word 2923765879
.word 1044460119 # v4 := {X, X, w27, w26, w25, w24, w23, w22}
.word 2923798647
.word 2928025719
.word 1048654423 # v4 := {x, X, w31, w30, w29, w28, w27, w26}
.word 2923864183
.word 2189632375 # v6 := {w32, w33, w34, w35, w36, w37, w38, w39}
# Prepare a register with {w35, w34, w33, w32, w31, w30, w29, w28}
.word 1044460119 # v4 := {X, X, X, X, w31, w30, w29, w28}
.word 979513943 # v4 := {w35, w34, w33, w32, w31, w30, w29, w28}
.word 2923896951
.word 1044460119 # v4 := {X, X, w35, w34, w33, w32, w31, w30}
.word 2923929719
.word 2926059639
.word 1046557271 # v4 := {X, X, w39, w38, w37, w36, w35, w34}
.word 2923995255
.word 2187601015 # v8 := {w47, w46, w45, w44, w43, w42, w41, w40}
# Prepare a register with {w43, w42, w41, w40, w39, w38, w37, w36}
.word 1044460119 # v4 := {X, X, X, X, w39, w38, w37, w36}
.word 981611095 # v4 := {w43, w42, w41, w40, w39, w38, w37, w36}
.word 2924028023
.word 1044460119 # v4 := {X, X, w43, w42, w41, w40, w39, w38}
.word 2924060791
.word 2928287863
.word 1048654423 # v4 := {X, X, w47, w46, w45, w44, w43, w42}
.word 2924126327
.word 2189632375 # v6 := {w55, w54, w53, w52, w51, w50, w49, w48}
# Prepare a register with {w51, w50, w49, w48, w47, w46, w45, w44}
.word 1044460119 # v4 := {X, X, X, X, w47, w46, w45, w44}
.word 979513943 # v4 := {w51, w50, w49, w48, w47, w46, w45, w44}
.word 2924159095
.word 1044460119 # v4 := {X, X, w51, w50, w49, w48, w47, w46}
.word 2924191863
.word 2926321783
.word 1046557271 # v4 := {X, X, w55, w54, w53, w52, w51, w50}
.word 2924257399
.word 2187601015 # v8 := {w63, w62, w61, w60, w59, w58, w57, w56}
# Prepare a register with {w59, w58, w57, w56, w55, w54, w53, w52}
.word 1044460119 # v4 := {X, X, X, X, w55, w54, w53, w52}
.word 981611095 # v4 := {w59, w58, w57, w56, w55, w54, w53, w52}
.word 2924290167
.word 1044460119 # v4 := {X, X, w59, w58, w57, w56, w55, w54}
.word 2924322935
.word 2928550007
.word 1048654423 # v4 := {X, X, w63, w62, w61, w60, w59, w58}
.word 2924388471
.word 2189632375 # v6 := {w71, w70, w69, w68, w67, w66, w65, w64}
# Prepare a register with {w67, w66, w65, w64, w63, w62, w61, w60}
.word 1044460119 # v4 := {X, X, X, X, w63, w62, w61, w60}
.word 979513943 # v4 := {w67, w66, w65, w64, w63, w62, w61, w60}
.word 2924421239
.word 1044460119 # v4 := {X, X, w67, w66, w65, w64, w63, w62}
.word 2924454007
# XOR in the previous state.
.word 771817559
bnez a2, L_sm3_loop # Check if there are any more block to process
L_sm3_end:
.word 1241817175
.word 33906727
ret
.size ossl_hwsm3_block_data_order_zvksh,.-ossl_hwsm3_block_data_order_zvksh
@@ -0,0 +1,188 @@
.text
.p2align 3
.globl rv64i_zvksed_sm4_set_encrypt_key
.type rv64i_zvksed_sm4_set_encrypt_key,@function
rv64i_zvksed_sm4_set_encrypt_key:
.word 0xc1027057
# Load the user key
.word 33906823
.word 1242865879
# Load the FK.
la t0, FK
.word 33743111
# Generate round keys.
.word 772866263
.word 2249204215 # rk[0:3]
.word 2251334263 # rk[4:7]
.word 2252415735 # rk[8:11]
.word 2253497207 # rk[12:15]
.word 2254578679 # rk[16:19]
.word 2255660151 # rk[20:23]
.word 2256741623 # rk[24:27]
.word 2257823095 # rk[28:31]
# Store round keys
.word 33939879 # rk[0:3]
addi a1, a1, 16
.word 33940007 # rk[4:7]
addi a1, a1, 16
.word 33940135 # rk[8:11]
addi a1, a1, 16
.word 33940263 # rk[12:15]
addi a1, a1, 16
.word 33940391 # rk[16:19]
addi a1, a1, 16
.word 33940519 # rk[20:23]
addi a1, a1, 16
.word 33940647 # rk[24:27]
addi a1, a1, 16
.word 33940775 # rk[28:31]
li a0, 1
ret
.size rv64i_zvksed_sm4_set_encrypt_key,.-rv64i_zvksed_sm4_set_encrypt_key
.p2align 3
.globl rv64i_zvksed_sm4_set_decrypt_key
.type rv64i_zvksed_sm4_set_decrypt_key,@function
rv64i_zvksed_sm4_set_decrypt_key:
.word 0xc1027057
# Load the user key
.word 33906823
.word 1242865879
# Load the FK.
la t0, FK
.word 33743111
# Generate round keys.
.word 772866263
.word 2249204215 # rk[0:3]
.word 2251334263 # rk[4:7]
.word 2252415735 # rk[8:11]
.word 2253497207 # rk[12:15]
.word 2254578679 # rk[16:19]
.word 2255660151 # rk[20:23]
.word 2256741623 # rk[24:27]
.word 2257823095 # rk[28:31]
# Store round keys in reverse order
addi a1, a1, 12
li t1, -4
.word 174449959 # rk[31:28]
addi a1, a1, 16
.word 174449831 # rk[27:24]
addi a1, a1, 16
.word 174449703 # rk[23:20]
addi a1, a1, 16
.word 174449575 # rk[19:16]
addi a1, a1, 16
.word 174449447 # rk[15:12]
addi a1, a1, 16
.word 174449319 # rk[11:8]
addi a1, a1, 16
.word 174449191 # rk[7:4]
addi a1, a1, 16
.word 174449063 # rk[3:0]
li a0, 1
ret
.size rv64i_zvksed_sm4_set_decrypt_key,.-rv64i_zvksed_sm4_set_decrypt_key
.p2align 3
.globl rv64i_zvksed_sm4_encrypt
.type rv64i_zvksed_sm4_encrypt,@function
rv64i_zvksed_sm4_encrypt:
.word 0xc1027057
# Order of elements was adjusted in set_encrypt_key()
.word 33972487 # rk[0:3]
addi a2, a2, 16
.word 33972615 # rk[4:7]
addi a2, a2, 16
.word 33972743 # rk[8:11]
addi a2, a2, 16
.word 33972871 # rk[12:15]
addi a2, a2, 16
.word 33972999 # rk[16:19]
addi a2, a2, 16
.word 33973127 # rk[20:23]
addi a2, a2, 16
.word 33973255 # rk[24:27]
addi a2, a2, 16
.word 33973383 # rk[28:31]
# Load input data
.word 33906823
.word 1242865879
# Encrypt with all keys
.word 2787647735
.word 2788696311
.word 2789744887
.word 2790793463
.word 2791842039
.word 2792890615
.word 2793939191
.word 2794987767
# Save the ciphertext (in reverse element order)
.word 1242865879
li t0, -4
addi a1, a1, 12
.word 173400231
ret
.size rv64i_zvksed_sm4_encrypt,.-rv64i_zvksed_sm4_encrypt
.p2align 3
.globl rv64i_zvksed_sm4_decrypt
.type rv64i_zvksed_sm4_decrypt,@function
rv64i_zvksed_sm4_decrypt:
.word 0xc1027057
# Order of elements was adjusted in set_decrypt_key()
.word 33973383 # rk[31:28]
addi a2, a2, 16
.word 33973255 # rk[27:24]
addi a2, a2, 16
.word 33973127 # rk[23:20]
addi a2, a2, 16
.word 33972999 # rk[19:16]
addi a2, a2, 16
.word 33972871 # rk[15:11]
addi a2, a2, 16
.word 33972743 # rk[11:8]
addi a2, a2, 16
.word 33972615 # rk[7:4]
addi a2, a2, 16
.word 33972487 # rk[3:0]
# Load input data
.word 33906823
.word 1242865879
# Encrypt with all keys
.word 2794987767
.word 2793939191
.word 2792890615
.word 2791842039
.word 2790793463
.word 2789744887
.word 2788696311
.word 2787647735
# Save the ciphertext (in reverse element order)
.word 1242865879
li t0, -4
addi a1, a1, 12
.word 173400231
ret
.size rv64i_zvksed_sm4_decrypt,.-rv64i_zvksed_sm4_decrypt
# Family Key (little-endian 32-bit chunks)
.p2align 3
FK:
.word 0xA3B1BAC6, 0x56AA3350, 0x677D9197, 0xB27022DC
.size FK,.-FK
@@ -0,0 +1,37 @@
/* clang-format off */
/* WARNING: do not edit! */
/* Generated by Makefile from include/crypto/bn_conf.h.in */
/* clang-format on */
/*
* Copyright 2016-2021 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 OSSL_CRYPTO_BN_CONF_H
#define OSSL_CRYPTO_BN_CONF_H
#pragma once
/*
* The contents of this file are not used in the UEFI build, as
* both 32-bit and 64-bit builds are supported from a single run
* of the Configure script.
*/
/* Should we define BN_DIV2W here? */
/* Only one for the following should be defined */
/* clang-format off */
#define SIXTY_FOUR_BIT_LONG
/* clang-format on */
/* clang-format off */
#undef SIXTY_FOUR_BIT
/* clang-format on */
/* clang-format off */
#undef THIRTY_TWO_BIT
/* clang-format on */
#endif
@@ -0,0 +1,25 @@
/* clang-format off */
/* WARNING: do not edit! */
/* Generated by Makefile from include/crypto/dso_conf.h.in */
/* clang-format on */
/*
* Copyright 2016-2021 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 OSSL_CRYPTO_DSO_CONF_H
#define OSSL_CRYPTO_DSO_CONF_H
#pragma once
/* clang-format off */
# define DSO_DLFCN
# define HAVE_DLFCN_H
/* clang-format on */
/* clang-format off */
# define DSO_EXTENSION ".so"
/* clang-format on */
#endif
@@ -0,0 +1,473 @@
/*
* WARNING: do not edit!
* Generated by Makefile from include/internal/param_names.h.in
*
* Copyright 2023 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
*/
/* clang-format off */
/* clang-format on */
int ossl_param_find_pidx(const char *s);
/* Parameter name definitions - generated by util/perl/OpenSSL/paramnames.pm */
/* clang-format off */
#define NUM_PIDX 346
#define PIDX_ALG_PARAM_ALGORITHM_ID 0
#define PIDX_ALG_PARAM_ALGORITHM_ID_PARAMS 1
#define PIDX_ALG_PARAM_CIPHER 2
#define PIDX_ALG_PARAM_DIGEST 3
#define PIDX_ALG_PARAM_ENGINE 4
#define PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR 5
#define PIDX_ALG_PARAM_MAC 6
#define PIDX_ALG_PARAM_PROPERTIES 7
#define PIDX_ASYM_CIPHER_PARAM_DIGEST PIDX_PKEY_PARAM_DIGEST
#define PIDX_ASYM_CIPHER_PARAM_ENGINE PIDX_PKEY_PARAM_ENGINE
#define PIDX_ASYM_CIPHER_PARAM_FIPS_APPROVED_INDICATOR PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR
#define PIDX_ASYM_CIPHER_PARAM_FIPS_KEY_CHECK PIDX_PKEY_PARAM_FIPS_KEY_CHECK
#define PIDX_ASYM_CIPHER_PARAM_FIPS_RSA_PKCS15_PAD_DISABLED PIDX_PROV_PARAM_RSA_PKCS15_PAD_DISABLED
#define PIDX_ASYM_CIPHER_PARAM_IMPLICIT_REJECTION 8
#define PIDX_ASYM_CIPHER_PARAM_MGF1_DIGEST PIDX_PKEY_PARAM_MGF1_DIGEST
#define PIDX_ASYM_CIPHER_PARAM_MGF1_DIGEST_PROPS PIDX_PKEY_PARAM_MGF1_PROPERTIES
#define PIDX_ASYM_CIPHER_PARAM_OAEP_DIGEST PIDX_ALG_PARAM_DIGEST
#define PIDX_ASYM_CIPHER_PARAM_OAEP_DIGEST_PROPS 9
#define PIDX_ASYM_CIPHER_PARAM_OAEP_LABEL 10
#define PIDX_ASYM_CIPHER_PARAM_PAD_MODE PIDX_PKEY_PARAM_PAD_MODE
#define PIDX_ASYM_CIPHER_PARAM_PROPERTIES PIDX_PKEY_PARAM_PROPERTIES
#define PIDX_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION 11
#define PIDX_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION 12
#define PIDX_CAPABILITY_TLS_GROUP_ALG 13
#define PIDX_CAPABILITY_TLS_GROUP_ID 14
#define PIDX_CAPABILITY_TLS_GROUP_IS_KEM 15
#define PIDX_CAPABILITY_TLS_GROUP_MAX_DTLS 16
#define PIDX_CAPABILITY_TLS_GROUP_MAX_TLS 17
#define PIDX_CAPABILITY_TLS_GROUP_MIN_DTLS 18
#define PIDX_CAPABILITY_TLS_GROUP_MIN_TLS 19
#define PIDX_CAPABILITY_TLS_GROUP_NAME 20
#define PIDX_CAPABILITY_TLS_GROUP_NAME_INTERNAL 21
#define PIDX_CAPABILITY_TLS_GROUP_SECURITY_BITS 22
#define PIDX_CAPABILITY_TLS_SIGALG_CODE_POINT 23
#define PIDX_CAPABILITY_TLS_SIGALG_HASH_NAME 24
#define PIDX_CAPABILITY_TLS_SIGALG_HASH_OID 25
#define PIDX_CAPABILITY_TLS_SIGALG_IANA_NAME 26
#define PIDX_CAPABILITY_TLS_SIGALG_KEYTYPE 27
#define PIDX_CAPABILITY_TLS_SIGALG_KEYTYPE_OID 28
#define PIDX_CAPABILITY_TLS_SIGALG_MAX_DTLS 16
#define PIDX_CAPABILITY_TLS_SIGALG_MAX_TLS 17
#define PIDX_CAPABILITY_TLS_SIGALG_MIN_DTLS 18
#define PIDX_CAPABILITY_TLS_SIGALG_MIN_TLS 19
#define PIDX_CAPABILITY_TLS_SIGALG_NAME 29
#define PIDX_CAPABILITY_TLS_SIGALG_OID 30
#define PIDX_CAPABILITY_TLS_SIGALG_SECURITY_BITS 31
#define PIDX_CAPABILITY_TLS_SIGALG_SIG_NAME 32
#define PIDX_CAPABILITY_TLS_SIGALG_SIG_OID 33
#define PIDX_CIPHER_PARAM_AEAD 34
#define PIDX_CIPHER_PARAM_AEAD_IVLEN PIDX_CIPHER_PARAM_IVLEN
#define PIDX_CIPHER_PARAM_AEAD_IV_GENERATED 35
#define PIDX_CIPHER_PARAM_AEAD_MAC_KEY 36
#define PIDX_CIPHER_PARAM_AEAD_TAG 37
#define PIDX_CIPHER_PARAM_AEAD_TAGLEN 38
#define PIDX_CIPHER_PARAM_AEAD_TLS1_AAD 39
#define PIDX_CIPHER_PARAM_AEAD_TLS1_AAD_PAD 40
#define PIDX_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN 41
#define PIDX_CIPHER_PARAM_AEAD_TLS1_IV_FIXED 42
#define PIDX_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV 43
#define PIDX_CIPHER_PARAM_ALGORITHM_ID PIDX_ALG_PARAM_ALGORITHM_ID
#define PIDX_CIPHER_PARAM_ALGORITHM_ID_PARAMS PIDX_ALG_PARAM_ALGORITHM_ID_PARAMS
#define PIDX_CIPHER_PARAM_ALGORITHM_ID_PARAMS_OLD 44
#define PIDX_CIPHER_PARAM_BLOCK_SIZE 45
#define PIDX_CIPHER_PARAM_CTS 46
#define PIDX_CIPHER_PARAM_CTS_MODE 47
#define PIDX_CIPHER_PARAM_CUSTOM_IV 48
#define PIDX_CIPHER_PARAM_DECRYPT_ONLY 49
#define PIDX_CIPHER_PARAM_FIPS_APPROVED_INDICATOR PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR
#define PIDX_CIPHER_PARAM_FIPS_ENCRYPT_CHECK 50
#define PIDX_CIPHER_PARAM_HAS_RAND_KEY 51
#define PIDX_CIPHER_PARAM_IV 52
#define PIDX_CIPHER_PARAM_IVLEN 53
#define PIDX_CIPHER_PARAM_KEYLEN 54
#define PIDX_CIPHER_PARAM_MODE 55
#define PIDX_CIPHER_PARAM_NUM 56
#define PIDX_CIPHER_PARAM_PADDING 57
#define PIDX_CIPHER_PARAM_PIPELINE_AEAD_TAG 58
#define PIDX_CIPHER_PARAM_RANDOM_KEY 59
#define PIDX_CIPHER_PARAM_RC2_KEYBITS 60
#define PIDX_CIPHER_PARAM_ROUNDS 61
#define PIDX_CIPHER_PARAM_SPEED 62
#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK 63
#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD 64
#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN 65
#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC 66
#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN 67
#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN 68
#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE 69
#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE 70
#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT 71
#define PIDX_CIPHER_PARAM_TLS_MAC 72
#define PIDX_CIPHER_PARAM_TLS_MAC_SIZE 73
#define PIDX_CIPHER_PARAM_TLS_VERSION 74
#define PIDX_CIPHER_PARAM_UPDATED_IV 75
#define PIDX_CIPHER_PARAM_USE_BITS 76
#define PIDX_CIPHER_PARAM_XTS_STANDARD 77
#define PIDX_DECODER_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES
#define PIDX_DIGEST_PARAM_ALGID_ABSENT 78
#define PIDX_DIGEST_PARAM_BLOCK_SIZE 45
#define PIDX_DIGEST_PARAM_MICALG 79
#define PIDX_DIGEST_PARAM_PAD_TYPE 80
#define PIDX_DIGEST_PARAM_SIZE 81
#define PIDX_DIGEST_PARAM_SSL3_MS 82
#define PIDX_DIGEST_PARAM_XOF 83
#define PIDX_DIGEST_PARAM_XOFLEN 84
#define PIDX_DRBG_PARAM_CIPHER PIDX_ALG_PARAM_CIPHER
#define PIDX_DRBG_PARAM_DIGEST PIDX_ALG_PARAM_DIGEST
#define PIDX_DRBG_PARAM_ENTROPY_REQUIRED 85
#define PIDX_DRBG_PARAM_FIPS_APPROVED_INDICATOR PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR
#define PIDX_DRBG_PARAM_FIPS_DIGEST_CHECK PIDX_PKEY_PARAM_FIPS_DIGEST_CHECK
#define PIDX_DRBG_PARAM_MAC PIDX_ALG_PARAM_MAC
#define PIDX_DRBG_PARAM_MAX_ADINLEN 86
#define PIDX_DRBG_PARAM_MAX_ENTROPYLEN 87
#define PIDX_DRBG_PARAM_MAX_LENGTH 88
#define PIDX_DRBG_PARAM_MAX_NONCELEN 89
#define PIDX_DRBG_PARAM_MAX_PERSLEN 90
#define PIDX_DRBG_PARAM_MIN_ENTROPYLEN 91
#define PIDX_DRBG_PARAM_MIN_LENGTH 92
#define PIDX_DRBG_PARAM_MIN_NONCELEN 93
#define PIDX_DRBG_PARAM_PREDICTION_RESISTANCE 94
#define PIDX_DRBG_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES
#define PIDX_DRBG_PARAM_RANDOM_DATA 95
#define PIDX_DRBG_PARAM_RESEED_COUNTER 96
#define PIDX_DRBG_PARAM_RESEED_REQUESTS 97
#define PIDX_DRBG_PARAM_RESEED_TIME 98
#define PIDX_DRBG_PARAM_RESEED_TIME_INTERVAL 99
#define PIDX_DRBG_PARAM_SIZE 81
#define PIDX_DRBG_PARAM_USE_DF 100
#define PIDX_ENCODER_PARAM_CIPHER PIDX_ALG_PARAM_CIPHER
#define PIDX_ENCODER_PARAM_ENCRYPT_LEVEL 101
#define PIDX_ENCODER_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES
#define PIDX_ENCODER_PARAM_SAVE_PARAMETERS 102
#define PIDX_EXCHANGE_PARAM_EC_ECDH_COFACTOR_MODE 103
#define PIDX_EXCHANGE_PARAM_FIPS_APPROVED_INDICATOR PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR
#define PIDX_EXCHANGE_PARAM_FIPS_DIGEST_CHECK PIDX_PKEY_PARAM_FIPS_DIGEST_CHECK
#define PIDX_EXCHANGE_PARAM_FIPS_ECDH_COFACTOR_CHECK PIDX_PROV_PARAM_ECDH_COFACTOR_CHECK
#define PIDX_EXCHANGE_PARAM_FIPS_KEY_CHECK PIDX_PKEY_PARAM_FIPS_KEY_CHECK
#define PIDX_EXCHANGE_PARAM_KDF_DIGEST 104
#define PIDX_EXCHANGE_PARAM_KDF_DIGEST_PROPS 105
#define PIDX_EXCHANGE_PARAM_KDF_OUTLEN 106
#define PIDX_EXCHANGE_PARAM_KDF_TYPE 107
#define PIDX_EXCHANGE_PARAM_KDF_UKM 108
#define PIDX_EXCHANGE_PARAM_PAD 109
#define PIDX_GEN_PARAM_ITERATION 110
#define PIDX_GEN_PARAM_POTENTIAL 111
#define PIDX_KDF_PARAM_ARGON2_AD 112
#define PIDX_KDF_PARAM_ARGON2_LANES 113
#define PIDX_KDF_PARAM_ARGON2_MEMCOST 114
#define PIDX_KDF_PARAM_ARGON2_VERSION 115
#define PIDX_KDF_PARAM_CEK_ALG 116
#define PIDX_KDF_PARAM_CIPHER PIDX_ALG_PARAM_CIPHER
#define PIDX_KDF_PARAM_CONSTANT 117
#define PIDX_KDF_PARAM_DATA 118
#define PIDX_KDF_PARAM_DIGEST PIDX_ALG_PARAM_DIGEST
#define PIDX_KDF_PARAM_EARLY_CLEAN 119
#define PIDX_KDF_PARAM_FIPS_APPROVED_INDICATOR PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR
#define PIDX_KDF_PARAM_FIPS_DIGEST_CHECK PIDX_PKEY_PARAM_FIPS_DIGEST_CHECK
#define PIDX_KDF_PARAM_FIPS_EMS_CHECK 120
#define PIDX_KDF_PARAM_FIPS_KEY_CHECK PIDX_PKEY_PARAM_FIPS_KEY_CHECK
#define PIDX_KDF_PARAM_HMACDRBG_ENTROPY 121
#define PIDX_KDF_PARAM_HMACDRBG_NONCE 122
#define PIDX_KDF_PARAM_INFO 123
#define PIDX_KDF_PARAM_ITER 124
#define PIDX_KDF_PARAM_KBKDF_R 125
#define PIDX_KDF_PARAM_KBKDF_USE_L 126
#define PIDX_KDF_PARAM_KBKDF_USE_SEPARATOR 127
#define PIDX_KDF_PARAM_KEY 128
#define PIDX_KDF_PARAM_LABEL 129
#define PIDX_KDF_PARAM_MAC PIDX_ALG_PARAM_MAC
#define PIDX_KDF_PARAM_MAC_SIZE 130
#define PIDX_KDF_PARAM_MODE 55
#define PIDX_KDF_PARAM_PASSWORD 131
#define PIDX_KDF_PARAM_PKCS12_ID 132
#define PIDX_KDF_PARAM_PKCS5 133
#define PIDX_KDF_PARAM_PREFIX 134
#define PIDX_KDF_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES
#define PIDX_KDF_PARAM_SALT 135
#define PIDX_KDF_PARAM_SCRYPT_MAXMEM 136
#define PIDX_KDF_PARAM_SCRYPT_N 137
#define PIDX_KDF_PARAM_SCRYPT_P 138
#define PIDX_KDF_PARAM_SCRYPT_R 125
#define PIDX_KDF_PARAM_SECRET 139
#define PIDX_KDF_PARAM_SEED 140
#define PIDX_KDF_PARAM_SIZE 81
#define PIDX_KDF_PARAM_SSHKDF_SESSION_ID 141
#define PIDX_KDF_PARAM_SSHKDF_TYPE 142
#define PIDX_KDF_PARAM_SSHKDF_XCGHASH 143
#define PIDX_KDF_PARAM_THREADS 144
#define PIDX_KDF_PARAM_UKM 145
#define PIDX_KDF_PARAM_X942_ACVPINFO 146
#define PIDX_KDF_PARAM_X942_PARTYUINFO 147
#define PIDX_KDF_PARAM_X942_PARTYVINFO 148
#define PIDX_KDF_PARAM_X942_SUPP_PRIVINFO 149
#define PIDX_KDF_PARAM_X942_SUPP_PUBINFO 150
#define PIDX_KDF_PARAM_X942_USE_KEYBITS 151
#define PIDX_KEM_PARAM_FIPS_APPROVED_INDICATOR PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR
#define PIDX_KEM_PARAM_FIPS_KEY_CHECK PIDX_PKEY_PARAM_FIPS_KEY_CHECK
#define PIDX_KEM_PARAM_IKME 152
#define PIDX_KEM_PARAM_OPERATION 153
#define PIDX_LIBSSL_RECORD_LAYER_PARAM_BLOCK_PADDING 154
#define PIDX_LIBSSL_RECORD_LAYER_PARAM_HS_PADDING 155
#define PIDX_LIBSSL_RECORD_LAYER_PARAM_MAX_EARLY_DATA 156
#define PIDX_LIBSSL_RECORD_LAYER_PARAM_MAX_FRAG_LEN 157
#define PIDX_LIBSSL_RECORD_LAYER_PARAM_MODE 55
#define PIDX_LIBSSL_RECORD_LAYER_PARAM_OPTIONS 158
#define PIDX_LIBSSL_RECORD_LAYER_PARAM_READ_AHEAD 159
#define PIDX_LIBSSL_RECORD_LAYER_PARAM_STREAM_MAC 160
#define PIDX_LIBSSL_RECORD_LAYER_PARAM_TLSTREE 161
#define PIDX_LIBSSL_RECORD_LAYER_PARAM_USE_ETM 162
#define PIDX_LIBSSL_RECORD_LAYER_READ_BUFFER_LEN 163
#define PIDX_MAC_PARAM_BLOCK_SIZE 164
#define PIDX_MAC_PARAM_CIPHER PIDX_ALG_PARAM_CIPHER
#define PIDX_MAC_PARAM_CUSTOM 165
#define PIDX_MAC_PARAM_C_ROUNDS 166
#define PIDX_MAC_PARAM_DIGEST PIDX_ALG_PARAM_DIGEST
#define PIDX_MAC_PARAM_DIGEST_NOINIT 167
#define PIDX_MAC_PARAM_DIGEST_ONESHOT 168
#define PIDX_MAC_PARAM_D_ROUNDS 169
#define PIDX_MAC_PARAM_FIPS_APPROVED_INDICATOR PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR
#define PIDX_MAC_PARAM_FIPS_KEY_CHECK PIDX_PKEY_PARAM_FIPS_KEY_CHECK
#define PIDX_MAC_PARAM_FIPS_NO_SHORT_MAC PIDX_PROV_PARAM_NO_SHORT_MAC
#define PIDX_MAC_PARAM_IV 52
#define PIDX_MAC_PARAM_KEY 128
#define PIDX_MAC_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES
#define PIDX_MAC_PARAM_SALT 135
#define PIDX_MAC_PARAM_SIZE 81
#define PIDX_MAC_PARAM_TLS_DATA_SIZE 170
#define PIDX_MAC_PARAM_XOF 83
#define PIDX_OBJECT_PARAM_DATA 118
#define PIDX_OBJECT_PARAM_DATA_STRUCTURE 171
#define PIDX_OBJECT_PARAM_DATA_TYPE 172
#define PIDX_OBJECT_PARAM_DESC 173
#define PIDX_OBJECT_PARAM_INPUT_TYPE 174
#define PIDX_OBJECT_PARAM_REFERENCE 175
#define PIDX_OBJECT_PARAM_TYPE 142
#define PIDX_PASSPHRASE_PARAM_INFO 123
#define PIDX_PKEY_PARAM_ALGORITHM_ID PIDX_ALG_PARAM_ALGORITHM_ID
#define PIDX_PKEY_PARAM_ALGORITHM_ID_PARAMS PIDX_ALG_PARAM_ALGORITHM_ID_PARAMS
#define PIDX_PKEY_PARAM_BITS 176
#define PIDX_PKEY_PARAM_CIPHER PIDX_ALG_PARAM_CIPHER
#define PIDX_PKEY_PARAM_DEFAULT_DIGEST 177
#define PIDX_PKEY_PARAM_DHKEM_IKM 178
#define PIDX_PKEY_PARAM_DH_GENERATOR 179
#define PIDX_PKEY_PARAM_DH_PRIV_LEN 180
#define PIDX_PKEY_PARAM_DIGEST PIDX_ALG_PARAM_DIGEST
#define PIDX_PKEY_PARAM_DIGEST_SIZE 181
#define PIDX_PKEY_PARAM_DIST_ID 182
#define PIDX_PKEY_PARAM_EC_A 183
#define PIDX_PKEY_PARAM_EC_B 184
#define PIDX_PKEY_PARAM_EC_CHAR2_M 185
#define PIDX_PKEY_PARAM_EC_CHAR2_PP_K1 186
#define PIDX_PKEY_PARAM_EC_CHAR2_PP_K2 187
#define PIDX_PKEY_PARAM_EC_CHAR2_PP_K3 188
#define PIDX_PKEY_PARAM_EC_CHAR2_TP_BASIS 189
#define PIDX_PKEY_PARAM_EC_CHAR2_TYPE 190
#define PIDX_PKEY_PARAM_EC_COFACTOR 191
#define PIDX_PKEY_PARAM_EC_DECODED_FROM_EXPLICIT_PARAMS 192
#define PIDX_PKEY_PARAM_EC_ENCODING 193
#define PIDX_PKEY_PARAM_EC_FIELD_TYPE 194
#define PIDX_PKEY_PARAM_EC_GENERATOR 195
#define PIDX_PKEY_PARAM_EC_GROUP_CHECK_TYPE 196
#define PIDX_PKEY_PARAM_EC_INCLUDE_PUBLIC 197
#define PIDX_PKEY_PARAM_EC_ORDER 198
#define PIDX_PKEY_PARAM_EC_P 138
#define PIDX_PKEY_PARAM_EC_POINT_CONVERSION_FORMAT 199
#define PIDX_PKEY_PARAM_EC_PUB_X 200
#define PIDX_PKEY_PARAM_EC_PUB_Y 201
#define PIDX_PKEY_PARAM_EC_SEED 140
#define PIDX_PKEY_PARAM_ENCODED_PUBLIC_KEY 202
#define PIDX_PKEY_PARAM_ENGINE PIDX_ALG_PARAM_ENGINE
#define PIDX_PKEY_PARAM_FFC_COFACTOR 203
#define PIDX_PKEY_PARAM_FFC_DIGEST PIDX_PKEY_PARAM_DIGEST
#define PIDX_PKEY_PARAM_FFC_DIGEST_PROPS PIDX_PKEY_PARAM_PROPERTIES
#define PIDX_PKEY_PARAM_FFC_G 204
#define PIDX_PKEY_PARAM_FFC_GINDEX 205
#define PIDX_PKEY_PARAM_FFC_H 206
#define PIDX_PKEY_PARAM_FFC_P 138
#define PIDX_PKEY_PARAM_FFC_PBITS 207
#define PIDX_PKEY_PARAM_FFC_PCOUNTER 208
#define PIDX_PKEY_PARAM_FFC_Q 209
#define PIDX_PKEY_PARAM_FFC_QBITS 210
#define PIDX_PKEY_PARAM_FFC_SEED 140
#define PIDX_PKEY_PARAM_FFC_TYPE 142
#define PIDX_PKEY_PARAM_FFC_VALIDATE_G 211
#define PIDX_PKEY_PARAM_FFC_VALIDATE_LEGACY 212
#define PIDX_PKEY_PARAM_FFC_VALIDATE_PQ 213
#define PIDX_PKEY_PARAM_FIPS_APPROVED_INDICATOR PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR
#define PIDX_PKEY_PARAM_FIPS_DIGEST_CHECK 214
#define PIDX_PKEY_PARAM_FIPS_KEY_CHECK 215
#define PIDX_PKEY_PARAM_FIPS_SIGN_CHECK 216
#define PIDX_PKEY_PARAM_GROUP_NAME 217
#define PIDX_PKEY_PARAM_IMPLICIT_REJECTION 8
#define PIDX_PKEY_PARAM_MANDATORY_DIGEST 218
#define PIDX_PKEY_PARAM_MASKGENFUNC 219
#define PIDX_PKEY_PARAM_MAX_SIZE 220
#define PIDX_PKEY_PARAM_MGF1_DIGEST 221
#define PIDX_PKEY_PARAM_MGF1_PROPERTIES 222
#define PIDX_PKEY_PARAM_ML_DSA_INPUT_FORMATS 223
#define PIDX_PKEY_PARAM_ML_DSA_OUTPUT_FORMATS 224
#define PIDX_PKEY_PARAM_ML_DSA_PREFER_SEED 225
#define PIDX_PKEY_PARAM_ML_DSA_RETAIN_SEED 226
#define PIDX_PKEY_PARAM_ML_DSA_SEED 140
#define PIDX_PKEY_PARAM_ML_KEM_IMPORT_PCT_TYPE 227
#define PIDX_PKEY_PARAM_ML_KEM_INPUT_FORMATS 228
#define PIDX_PKEY_PARAM_ML_KEM_OUTPUT_FORMATS 229
#define PIDX_PKEY_PARAM_ML_KEM_PREFER_SEED 230
#define PIDX_PKEY_PARAM_ML_KEM_RETAIN_SEED 231
#define PIDX_PKEY_PARAM_ML_KEM_SEED 140
#define PIDX_PKEY_PARAM_PAD_MODE 232
#define PIDX_PKEY_PARAM_PRIV_KEY 233
#define PIDX_PKEY_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES
#define PIDX_PKEY_PARAM_PUB_KEY 234
#define PIDX_PKEY_PARAM_RSA_BITS PIDX_PKEY_PARAM_BITS
#define PIDX_PKEY_PARAM_RSA_COEFFICIENT 235
#define PIDX_PKEY_PARAM_RSA_COEFFICIENT1 236
#define PIDX_PKEY_PARAM_RSA_COEFFICIENT2 237
#define PIDX_PKEY_PARAM_RSA_COEFFICIENT3 238
#define PIDX_PKEY_PARAM_RSA_COEFFICIENT4 239
#define PIDX_PKEY_PARAM_RSA_COEFFICIENT5 240
#define PIDX_PKEY_PARAM_RSA_COEFFICIENT6 241
#define PIDX_PKEY_PARAM_RSA_COEFFICIENT7 242
#define PIDX_PKEY_PARAM_RSA_COEFFICIENT8 243
#define PIDX_PKEY_PARAM_RSA_COEFFICIENT9 244
#define PIDX_PKEY_PARAM_RSA_D 245
#define PIDX_PKEY_PARAM_RSA_DERIVE_FROM_PQ 246
#define PIDX_PKEY_PARAM_RSA_DIGEST PIDX_PKEY_PARAM_DIGEST
#define PIDX_PKEY_PARAM_RSA_DIGEST_PROPS PIDX_PKEY_PARAM_PROPERTIES
#define PIDX_PKEY_PARAM_RSA_E 247
#define PIDX_PKEY_PARAM_RSA_EXPONENT 248
#define PIDX_PKEY_PARAM_RSA_EXPONENT1 249
#define PIDX_PKEY_PARAM_RSA_EXPONENT10 250
#define PIDX_PKEY_PARAM_RSA_EXPONENT2 251
#define PIDX_PKEY_PARAM_RSA_EXPONENT3 252
#define PIDX_PKEY_PARAM_RSA_EXPONENT4 253
#define PIDX_PKEY_PARAM_RSA_EXPONENT5 254
#define PIDX_PKEY_PARAM_RSA_EXPONENT6 255
#define PIDX_PKEY_PARAM_RSA_EXPONENT7 256
#define PIDX_PKEY_PARAM_RSA_EXPONENT8 257
#define PIDX_PKEY_PARAM_RSA_EXPONENT9 258
#define PIDX_PKEY_PARAM_RSA_FACTOR 259
#define PIDX_PKEY_PARAM_RSA_FACTOR1 260
#define PIDX_PKEY_PARAM_RSA_FACTOR10 261
#define PIDX_PKEY_PARAM_RSA_FACTOR2 262
#define PIDX_PKEY_PARAM_RSA_FACTOR3 263
#define PIDX_PKEY_PARAM_RSA_FACTOR4 264
#define PIDX_PKEY_PARAM_RSA_FACTOR5 265
#define PIDX_PKEY_PARAM_RSA_FACTOR6 266
#define PIDX_PKEY_PARAM_RSA_FACTOR7 267
#define PIDX_PKEY_PARAM_RSA_FACTOR8 268
#define PIDX_PKEY_PARAM_RSA_FACTOR9 269
#define PIDX_PKEY_PARAM_RSA_MASKGENFUNC PIDX_PKEY_PARAM_MASKGENFUNC
#define PIDX_PKEY_PARAM_RSA_MGF1_DIGEST PIDX_PKEY_PARAM_MGF1_DIGEST
#define PIDX_PKEY_PARAM_RSA_N 137
#define PIDX_PKEY_PARAM_RSA_PRIMES 270
#define PIDX_PKEY_PARAM_RSA_PSS_SALTLEN 271
#define PIDX_PKEY_PARAM_RSA_TEST_P1 272
#define PIDX_PKEY_PARAM_RSA_TEST_P2 273
#define PIDX_PKEY_PARAM_RSA_TEST_Q1 274
#define PIDX_PKEY_PARAM_RSA_TEST_Q2 275
#define PIDX_PKEY_PARAM_RSA_TEST_XP 276
#define PIDX_PKEY_PARAM_RSA_TEST_XP1 277
#define PIDX_PKEY_PARAM_RSA_TEST_XP2 278
#define PIDX_PKEY_PARAM_RSA_TEST_XQ 279
#define PIDX_PKEY_PARAM_RSA_TEST_XQ1 280
#define PIDX_PKEY_PARAM_RSA_TEST_XQ2 281
#define PIDX_PKEY_PARAM_SECURITY_BITS 282
#define PIDX_PKEY_PARAM_SLH_DSA_SEED 140
#define PIDX_PKEY_PARAM_USE_COFACTOR_ECDH PIDX_PKEY_PARAM_USE_COFACTOR_FLAG
#define PIDX_PKEY_PARAM_USE_COFACTOR_FLAG 283
#define PIDX_PROV_PARAM_BUILDINFO 284
#define PIDX_PROV_PARAM_CORE_MODULE_FILENAME 285
#define PIDX_PROV_PARAM_CORE_PROV_NAME 286
#define PIDX_PROV_PARAM_CORE_VERSION 287
#define PIDX_PROV_PARAM_DRBG_TRUNC_DIGEST 288
#define PIDX_PROV_PARAM_DSA_SIGN_DISABLED 289
#define PIDX_PROV_PARAM_ECDH_COFACTOR_CHECK 290
#define PIDX_PROV_PARAM_HKDF_DIGEST_CHECK 291
#define PIDX_PROV_PARAM_HKDF_KEY_CHECK 292
#define PIDX_PROV_PARAM_HMAC_KEY_CHECK 293
#define PIDX_PROV_PARAM_KBKDF_KEY_CHECK 294
#define PIDX_PROV_PARAM_KMAC_KEY_CHECK 295
#define PIDX_PROV_PARAM_NAME 296
#define PIDX_PROV_PARAM_NO_SHORT_MAC 297
#define PIDX_PROV_PARAM_PBKDF2_LOWER_BOUND_CHECK 298
#define PIDX_PROV_PARAM_RSA_PKCS15_PAD_DISABLED 299
#define PIDX_PROV_PARAM_RSA_PSS_SALTLEN_CHECK 300
#define PIDX_PROV_PARAM_RSA_SIGN_X931_PAD_DISABLED 301
#define PIDX_PROV_PARAM_SECURITY_CHECKS 302
#define PIDX_PROV_PARAM_SELF_TEST_DESC 303
#define PIDX_PROV_PARAM_SELF_TEST_PHASE 304
#define PIDX_PROV_PARAM_SELF_TEST_TYPE 305
#define PIDX_PROV_PARAM_SIGNATURE_DIGEST_CHECK 306
#define PIDX_PROV_PARAM_SSHKDF_DIGEST_CHECK 307
#define PIDX_PROV_PARAM_SSHKDF_KEY_CHECK 308
#define PIDX_PROV_PARAM_SSKDF_DIGEST_CHECK 309
#define PIDX_PROV_PARAM_SSKDF_KEY_CHECK 310
#define PIDX_PROV_PARAM_STATUS 311
#define PIDX_PROV_PARAM_TDES_ENCRYPT_DISABLED 312
#define PIDX_PROV_PARAM_TLS13_KDF_DIGEST_CHECK 313
#define PIDX_PROV_PARAM_TLS13_KDF_KEY_CHECK 314
#define PIDX_PROV_PARAM_TLS1_PRF_DIGEST_CHECK 315
#define PIDX_PROV_PARAM_TLS1_PRF_EMS_CHECK 316
#define PIDX_PROV_PARAM_TLS1_PRF_KEY_CHECK 317
#define PIDX_PROV_PARAM_VERSION 115
#define PIDX_PROV_PARAM_X942KDF_KEY_CHECK 318
#define PIDX_PROV_PARAM_X963KDF_DIGEST_CHECK 319
#define PIDX_PROV_PARAM_X963KDF_KEY_CHECK 320
#define PIDX_RAND_PARAM_FIPS_APPROVED_INDICATOR PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR
#define PIDX_RAND_PARAM_GENERATE 321
#define PIDX_RAND_PARAM_MAX_REQUEST 322
#define PIDX_RAND_PARAM_STATE 323
#define PIDX_RAND_PARAM_STRENGTH 324
#define PIDX_RAND_PARAM_TEST_ENTROPY 325
#define PIDX_RAND_PARAM_TEST_NONCE 326
#define PIDX_SIGNATURE_PARAM_ADD_RANDOM 327
#define PIDX_SIGNATURE_PARAM_ALGORITHM_ID PIDX_PKEY_PARAM_ALGORITHM_ID
#define PIDX_SIGNATURE_PARAM_ALGORITHM_ID_PARAMS PIDX_PKEY_PARAM_ALGORITHM_ID_PARAMS
#define PIDX_SIGNATURE_PARAM_CONTEXT_STRING 328
#define PIDX_SIGNATURE_PARAM_DETERMINISTIC 329
#define PIDX_SIGNATURE_PARAM_DIGEST PIDX_PKEY_PARAM_DIGEST
#define PIDX_SIGNATURE_PARAM_DIGEST_SIZE PIDX_PKEY_PARAM_DIGEST_SIZE
#define PIDX_SIGNATURE_PARAM_FIPS_APPROVED_INDICATOR PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR
#define PIDX_SIGNATURE_PARAM_FIPS_DIGEST_CHECK PIDX_PKEY_PARAM_FIPS_DIGEST_CHECK
#define PIDX_SIGNATURE_PARAM_FIPS_KEY_CHECK PIDX_PKEY_PARAM_FIPS_KEY_CHECK
#define PIDX_SIGNATURE_PARAM_FIPS_RSA_PSS_SALTLEN_CHECK 300
#define PIDX_SIGNATURE_PARAM_FIPS_SIGN_CHECK PIDX_PKEY_PARAM_FIPS_SIGN_CHECK
#define PIDX_SIGNATURE_PARAM_FIPS_SIGN_X931_PAD_CHECK 330
#define PIDX_SIGNATURE_PARAM_FIPS_VERIFY_MESSAGE 331
#define PIDX_SIGNATURE_PARAM_INSTANCE 332
#define PIDX_SIGNATURE_PARAM_KAT 333
#define PIDX_SIGNATURE_PARAM_MESSAGE_ENCODING 334
#define PIDX_SIGNATURE_PARAM_MGF1_DIGEST PIDX_PKEY_PARAM_MGF1_DIGEST
#define PIDX_SIGNATURE_PARAM_MGF1_PROPERTIES PIDX_PKEY_PARAM_MGF1_PROPERTIES
#define PIDX_SIGNATURE_PARAM_MU 335
#define PIDX_SIGNATURE_PARAM_NONCE_TYPE 336
#define PIDX_SIGNATURE_PARAM_PAD_MODE PIDX_PKEY_PARAM_PAD_MODE
#define PIDX_SIGNATURE_PARAM_PROPERTIES PIDX_PKEY_PARAM_PROPERTIES
#define PIDX_SIGNATURE_PARAM_PSS_SALTLEN 271
#define PIDX_SIGNATURE_PARAM_SIGNATURE 337
#define PIDX_SIGNATURE_PARAM_TEST_ENTROPY 338
#define PIDX_SKEY_PARAM_KEY_LENGTH 339
#define PIDX_SKEY_PARAM_RAW_BYTES 340
#define PIDX_STORE_PARAM_ALIAS 341
#define PIDX_STORE_PARAM_DIGEST 3
#define PIDX_STORE_PARAM_EXPECT 342
#define PIDX_STORE_PARAM_FINGERPRINT 343
#define PIDX_STORE_PARAM_INPUT_TYPE 174
#define PIDX_STORE_PARAM_ISSUER 296
#define PIDX_STORE_PARAM_PROPERTIES 7
#define PIDX_STORE_PARAM_SERIAL 344
#define PIDX_STORE_PARAM_SUBJECT 345
/* clang-format on */
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,935 @@
/*
* WARNING: do not edit!
* Generated by Makefile from include/openssl/asn1t.h.in
*
* Copyright 2000-2021 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
*/
/* clang-format off */
/* clang-format on */
#ifndef OPENSSL_ASN1T_H
#define OPENSSL_ASN1T_H
#pragma once
#include <openssl/macros.h>
#ifndef OPENSSL_NO_DEPRECATED_3_0
#define HEADER_ASN1T_H
#endif
#include <stddef.h>
#include <openssl/e_os2.h>
#include <openssl/asn1.h>
#ifdef OPENSSL_BUILD_SHLIBCRYPTO
#undef OPENSSL_EXTERN
#define OPENSSL_EXTERN OPENSSL_EXPORT
#endif
/* ASN1 template defines, structures and functions */
#ifdef __cplusplus
extern "C" {
#endif
/*-
* These are the possible values for the itype field of the
* ASN1_ITEM structure and determine how it is interpreted.
*
* For PRIMITIVE types the underlying type
* determines the behaviour if items is NULL.
*
* Otherwise templates must contain a single
* template and the type is treated in the
* same way as the type specified in the template.
*
* For SEQUENCE types the templates field points
* to the members, the size field is the
* structure size.
*
* For CHOICE types the templates field points
* to each possible member (typically a union)
* and the 'size' field is the offset of the
* selector.
*
* The 'funcs' field is used for application-specific
* data and functions.
*
* The EXTERN type uses a new style d2i/i2d.
* The new style should be used where possible
* because it avoids things like the d2i IMPLICIT
* hack.
*
* MSTRING is a multiple string type, it is used
* for a CHOICE of character strings where the
* actual strings all occupy an ASN1_STRING
* structure. In this case the 'utype' field
* has a special meaning, it is used as a mask
* of acceptable types using the B_ASN1 constants.
*
* NDEF_SEQUENCE is the same as SEQUENCE except
* that it will use indefinite length constructed
* encoding if requested.
*
*/
#define ASN1_ITYPE_PRIMITIVE 0x0
#define ASN1_ITYPE_SEQUENCE 0x1
#define ASN1_ITYPE_CHOICE 0x2
/* unused value 0x3 */
#define ASN1_ITYPE_EXTERN 0x4
#define ASN1_ITYPE_MSTRING 0x5
#define ASN1_ITYPE_NDEF_SEQUENCE 0x6
/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */
#define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)((iptr)()))
/* Macros for start and end of ASN1_ITEM definition */
#define ASN1_ITEM_start(itname) \
const ASN1_ITEM *itname##_it(void) \
{ \
static const ASN1_ITEM local_it = {
#define static_ASN1_ITEM_start(itname) \
static ASN1_ITEM_start(itname)
#define ASN1_ITEM_end(itname) \
} \
; \
return &local_it; \
}
/* Macros to aid ASN1 template writing */
#define ASN1_ITEM_TEMPLATE(tname) \
static const ASN1_TEMPLATE tname##_item_tt
#define ASN1_ITEM_TEMPLATE_END(tname) \
; \
ASN1_ITEM_start(tname) \
ASN1_ITYPE_PRIMITIVE, \
-1, \
&tname##_item_tt, \
0, \
NULL, \
0, \
#tname ASN1_ITEM_end(tname)
#define static_ASN1_ITEM_TEMPLATE_END(tname) \
; \
static_ASN1_ITEM_start(tname) \
ASN1_ITYPE_PRIMITIVE, \
-1, \
&tname##_item_tt, \
0, \
NULL, \
0, \
#tname ASN1_ITEM_end(tname)
/* This is a ASN1 type which just embeds a template */
/*-
* This pair helps declare a SEQUENCE. We can do:
*
* ASN1_SEQUENCE(stname) = {
* ... SEQUENCE components ...
* } ASN1_SEQUENCE_END(stname)
*
* This will produce an ASN1_ITEM called stname_it
* for a structure called stname.
*
* If you want the same structure but a different
* name then use:
*
* ASN1_SEQUENCE(itname) = {
* ... SEQUENCE components ...
* } ASN1_SEQUENCE_END_name(stname, itname)
*
* This will create an item called itname_it using
* a structure called stname.
*/
#define ASN1_SEQUENCE(tname) \
static const ASN1_TEMPLATE tname##_seq_tt[]
#define ASN1_SEQUENCE_END(stname) ASN1_SEQUENCE_END_name(stname, stname)
#define static_ASN1_SEQUENCE_END(stname) static_ASN1_SEQUENCE_END_name(stname, stname)
#define ASN1_SEQUENCE_END_name(stname, tname) \
; \
ASN1_ITEM_start(tname) \
ASN1_ITYPE_SEQUENCE, \
V_ASN1_SEQUENCE, \
tname##_seq_tt, \
sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE), \
NULL, \
sizeof(stname), \
#tname ASN1_ITEM_end(tname)
#define static_ASN1_SEQUENCE_END_name(stname, tname) \
; \
static_ASN1_ITEM_start(tname) \
ASN1_ITYPE_SEQUENCE, \
V_ASN1_SEQUENCE, \
tname##_seq_tt, \
sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE), \
NULL, \
sizeof(stname), \
#stname ASN1_ITEM_end(tname)
#define ASN1_NDEF_SEQUENCE(tname) \
ASN1_SEQUENCE(tname)
#define ASN1_NDEF_SEQUENCE_cb(tname, cb) \
ASN1_SEQUENCE_cb(tname, cb)
#define ASN1_SEQUENCE_cb(tname, cb) \
static const ASN1_AUX tname##_aux = { NULL, 0, 0, 0, cb, 0, NULL }; \
ASN1_SEQUENCE(tname)
#define ASN1_SEQUENCE_const_cb(tname, const_cb) \
static const ASN1_AUX tname##_aux = { NULL, ASN1_AFLG_CONST_CB, 0, 0, NULL, 0, const_cb }; \
ASN1_SEQUENCE(tname)
#define ASN1_SEQUENCE_cb_const_cb(tname, cb, const_cb) \
static const ASN1_AUX tname##_aux = { NULL, ASN1_AFLG_CONST_CB, 0, 0, cb, 0, const_cb }; \
ASN1_SEQUENCE(tname)
#define ASN1_SEQUENCE_ref(tname, cb) \
static const ASN1_AUX tname##_aux = { NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), offsetof(tname, lock), cb, 0, NULL }; \
ASN1_SEQUENCE(tname)
#define ASN1_SEQUENCE_enc(tname, enc, cb) \
static const ASN1_AUX tname##_aux = { NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc), NULL }; \
ASN1_SEQUENCE(tname)
#define ASN1_NDEF_SEQUENCE_END(tname) \
; \
ASN1_ITEM_start(tname) \
ASN1_ITYPE_NDEF_SEQUENCE, \
V_ASN1_SEQUENCE, \
tname##_seq_tt, \
sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE), \
NULL, \
sizeof(tname), \
#tname ASN1_ITEM_end(tname)
#define static_ASN1_NDEF_SEQUENCE_END(tname) \
; \
static_ASN1_ITEM_start(tname) \
ASN1_ITYPE_NDEF_SEQUENCE, \
V_ASN1_SEQUENCE, \
tname##_seq_tt, \
sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE), \
NULL, \
sizeof(tname), \
#tname ASN1_ITEM_end(tname)
#define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname)
#define ASN1_SEQUENCE_END_cb(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname)
#define static_ASN1_SEQUENCE_END_cb(stname, tname) static_ASN1_SEQUENCE_END_ref(stname, tname)
#define ASN1_SEQUENCE_END_ref(stname, tname) \
; \
ASN1_ITEM_start(tname) \
ASN1_ITYPE_SEQUENCE, \
V_ASN1_SEQUENCE, \
tname##_seq_tt, \
sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE), \
&tname##_aux, \
sizeof(stname), \
#tname ASN1_ITEM_end(tname)
#define static_ASN1_SEQUENCE_END_ref(stname, tname) \
; \
static_ASN1_ITEM_start(tname) \
ASN1_ITYPE_SEQUENCE, \
V_ASN1_SEQUENCE, \
tname##_seq_tt, \
sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE), \
&tname##_aux, \
sizeof(stname), \
#stname ASN1_ITEM_end(tname)
#define ASN1_NDEF_SEQUENCE_END_cb(stname, tname) \
; \
ASN1_ITEM_start(tname) \
ASN1_ITYPE_NDEF_SEQUENCE, \
V_ASN1_SEQUENCE, \
tname##_seq_tt, \
sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE), \
&tname##_aux, \
sizeof(stname), \
#stname ASN1_ITEM_end(tname)
/*-
* This pair helps declare a CHOICE type. We can do:
*
* ASN1_CHOICE(chname) = {
* ... CHOICE options ...
* ASN1_CHOICE_END(chname)
*
* This will produce an ASN1_ITEM called chname_it
* for a structure called chname. The structure
* definition must look like this:
* typedef struct {
* int type;
* union {
* ASN1_SOMETHING *opt1;
* ASN1_SOMEOTHER *opt2;
* } value;
* } chname;
*
* the name of the selector must be 'type'.
* to use an alternative selector name use the
* ASN1_CHOICE_END_selector() version.
*/
#define ASN1_CHOICE(tname) \
static const ASN1_TEMPLATE tname##_ch_tt[]
#define ASN1_CHOICE_cb(tname, cb) \
static const ASN1_AUX tname##_aux = { NULL, 0, 0, 0, cb, 0, NULL }; \
ASN1_CHOICE(tname)
#define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname)
#define static_ASN1_CHOICE_END(stname) static_ASN1_CHOICE_END_name(stname, stname)
#define ASN1_CHOICE_END_name(stname, tname) ASN1_CHOICE_END_selector(stname, tname, type)
#define static_ASN1_CHOICE_END_name(stname, tname) static_ASN1_CHOICE_END_selector(stname, tname, type)
#define ASN1_CHOICE_END_selector(stname, tname, selname) \
; \
ASN1_ITEM_start(tname) \
ASN1_ITYPE_CHOICE, \
offsetof(stname, selname), \
tname##_ch_tt, \
sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE), \
NULL, \
sizeof(stname), \
#stname ASN1_ITEM_end(tname)
#define static_ASN1_CHOICE_END_selector(stname, tname, selname) \
; \
static_ASN1_ITEM_start(tname) \
ASN1_ITYPE_CHOICE, \
offsetof(stname, selname), \
tname##_ch_tt, \
sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE), \
NULL, \
sizeof(stname), \
#stname ASN1_ITEM_end(tname)
#define ASN1_CHOICE_END_cb(stname, tname, selname) \
; \
ASN1_ITEM_start(tname) \
ASN1_ITYPE_CHOICE, \
offsetof(stname, selname), \
tname##_ch_tt, \
sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE), \
&tname##_aux, \
sizeof(stname), \
#stname ASN1_ITEM_end(tname)
/* This helps with the template wrapper form of ASN1_ITEM */
#define ASN1_EX_TEMPLATE_TYPE(flags, tag, name, type) { \
(flags), (tag), 0, \
#name, ASN1_ITEM_ref(type) \
}
/* These help with SEQUENCE or CHOICE components */
/* used to declare other types */
#define ASN1_EX_TYPE(flags, tag, stname, field, type) { \
(flags), (tag), offsetof(stname, field), \
#field, ASN1_ITEM_ref(type) \
}
/* implicit and explicit helper macros */
#define ASN1_IMP_EX(stname, field, type, tag, ex) \
ASN1_EX_TYPE(ASN1_TFLG_IMPLICIT | (ex), tag, stname, field, type)
#define ASN1_EXP_EX(stname, field, type, tag, ex) \
ASN1_EX_TYPE(ASN1_TFLG_EXPLICIT | (ex), tag, stname, field, type)
/* Any defined by macros: the field used is in the table itself */
#define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb }
#define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb }
/* Plain simple type */
#define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0, 0, stname, field, type)
/* Embedded simple type */
#define ASN1_EMBED(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_EMBED, 0, stname, field, type)
/* OPTIONAL simple type */
#define ASN1_OPT(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL, 0, stname, field, type)
#define ASN1_OPT_EMBED(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL | ASN1_TFLG_EMBED, 0, stname, field, type)
/* IMPLICIT tagged simple type */
#define ASN1_IMP(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, 0)
#define ASN1_IMP_EMBED(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_EMBED)
/* IMPLICIT tagged OPTIONAL simple type */
#define ASN1_IMP_OPT(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL)
#define ASN1_IMP_OPT_EMBED(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL | ASN1_TFLG_EMBED)
/* Same as above but EXPLICIT */
#define ASN1_EXP(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, 0)
#define ASN1_EXP_EMBED(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_EMBED)
#define ASN1_EXP_OPT(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL)
#define ASN1_EXP_OPT_EMBED(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL | ASN1_TFLG_EMBED)
/* SEQUENCE OF type */
#define ASN1_SEQUENCE_OF(stname, field, type) \
ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, stname, field, type)
/* OPTIONAL SEQUENCE OF */
#define ASN1_SEQUENCE_OF_OPT(stname, field, type) \
ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, 0, stname, field, type)
/* Same as above but for SET OF */
#define ASN1_SET_OF(stname, field, type) \
ASN1_EX_TYPE(ASN1_TFLG_SET_OF, 0, stname, field, type)
#define ASN1_SET_OF_OPT(stname, field, type) \
ASN1_EX_TYPE(ASN1_TFLG_SET_OF | ASN1_TFLG_OPTIONAL, 0, stname, field, type)
/* Finally compound types of SEQUENCE, SET, IMPLICIT, EXPLICIT and OPTIONAL */
#define ASN1_IMP_SET_OF(stname, field, type, tag) \
ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF)
#define ASN1_EXP_SET_OF(stname, field, type, tag) \
ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF)
#define ASN1_IMP_SET_OF_OPT(stname, field, type, tag) \
ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF | ASN1_TFLG_OPTIONAL)
#define ASN1_EXP_SET_OF_OPT(stname, field, type, tag) \
ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF | ASN1_TFLG_OPTIONAL)
#define ASN1_IMP_SEQUENCE_OF(stname, field, type, tag) \
ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF)
#define ASN1_IMP_SEQUENCE_OF_OPT(stname, field, type, tag) \
ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL)
#define ASN1_EXP_SEQUENCE_OF(stname, field, type, tag) \
ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF)
#define ASN1_EXP_SEQUENCE_OF_OPT(stname, field, type, tag) \
ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL)
/* EXPLICIT using indefinite length constructed form */
#define ASN1_NDEF_EXP(stname, field, type, tag) \
ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_NDEF)
/* EXPLICIT OPTIONAL using indefinite length constructed form */
#define ASN1_NDEF_EXP_OPT(stname, field, type, tag) \
ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL | ASN1_TFLG_NDEF)
/* Macros for the ASN1_ADB structure */
#define ASN1_ADB(name) \
static const ASN1_ADB_TABLE name##_adbtbl[]
#define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \
; \
static const ASN1_ITEM *name##_adb(void) \
{ \
static const ASN1_ADB internal_adb = { \
flags, \
offsetof(name, field), \
adb_cb, \
name##_adbtbl, \
sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE), \
def, \
none \
}; \
return (const ASN1_ITEM *)&internal_adb; \
} \
void dummy_function(void)
#define ADB_ENTRY(val, template) { val, template }
#define ASN1_ADB_TEMPLATE(name) \
static const ASN1_TEMPLATE name##_tt
/*
* This is the ASN1 template structure that defines a wrapper round the
* actual type. It determines the actual position of the field in the value
* structure, various flags such as OPTIONAL and the field name.
*/
struct ASN1_TEMPLATE_st {
unsigned long flags; /* Various flags */
long tag; /* tag, not used if no tagging */
unsigned long offset; /* Offset of this field in structure */
const char *field_name; /* Field name */
ASN1_ITEM_EXP *item; /* Relevant ASN1_ITEM or ASN1_ADB */
};
/* Macro to extract ASN1_ITEM and ASN1_ADB pointer from ASN1_TEMPLATE */
#define ASN1_TEMPLATE_item(t) (t->item_ptr)
#define ASN1_TEMPLATE_adb(t) (t->item_ptr)
typedef struct ASN1_ADB_TABLE_st ASN1_ADB_TABLE;
typedef struct ASN1_ADB_st ASN1_ADB;
struct ASN1_ADB_st {
unsigned long flags; /* Various flags */
unsigned long offset; /* Offset of selector field */
int (*adb_cb)(long *psel); /* Application callback */
const ASN1_ADB_TABLE *tbl; /* Table of possible types */
long tblcount; /* Number of entries in tbl */
const ASN1_TEMPLATE *default_tt; /* Type to use if no match */
const ASN1_TEMPLATE *null_tt; /* Type to use if selector is NULL */
};
struct ASN1_ADB_TABLE_st {
long value; /* NID for an object or value for an int */
const ASN1_TEMPLATE tt; /* item for this value */
};
/* template flags */
/* Field is optional */
#define ASN1_TFLG_OPTIONAL (0x1)
/* Field is a SET OF */
#define ASN1_TFLG_SET_OF (0x1 << 1)
/* Field is a SEQUENCE OF */
#define ASN1_TFLG_SEQUENCE_OF (0x2 << 1)
/*
* Special case: this refers to a SET OF that will be sorted into DER order
* when encoded *and* the corresponding STACK will be modified to match the
* new order.
*/
#define ASN1_TFLG_SET_ORDER (0x3 << 1)
/* Mask for SET OF or SEQUENCE OF */
#define ASN1_TFLG_SK_MASK (0x3 << 1)
/*
* These flags mean the tag should be taken from the tag field. If EXPLICIT
* then the underlying type is used for the inner tag.
*/
/* IMPLICIT tagging */
#define ASN1_TFLG_IMPTAG (0x1 << 3)
/* EXPLICIT tagging, inner tag from underlying type */
#define ASN1_TFLG_EXPTAG (0x2 << 3)
#define ASN1_TFLG_TAG_MASK (0x3 << 3)
/* context specific IMPLICIT */
#define ASN1_TFLG_IMPLICIT (ASN1_TFLG_IMPTAG | ASN1_TFLG_CONTEXT)
/* context specific EXPLICIT */
#define ASN1_TFLG_EXPLICIT (ASN1_TFLG_EXPTAG | ASN1_TFLG_CONTEXT)
/*
* If tagging is in force these determine the type of tag to use. Otherwise
* the tag is determined by the underlying type. These values reflect the
* actual octet format.
*/
/* Universal tag */
#define ASN1_TFLG_UNIVERSAL (0x0 << 6)
/* Application tag */
#define ASN1_TFLG_APPLICATION (0x1 << 6)
/* Context specific tag */
#define ASN1_TFLG_CONTEXT (0x2 << 6)
/* Private tag */
#define ASN1_TFLG_PRIVATE (0x3 << 6)
#define ASN1_TFLG_TAG_CLASS (0x3 << 6)
/*
* These are for ANY DEFINED BY type. In this case the 'item' field points to
* an ASN1_ADB structure which contains a table of values to decode the
* relevant type
*/
#define ASN1_TFLG_ADB_MASK (0x3 << 8)
#define ASN1_TFLG_ADB_OID (0x1 << 8)
#define ASN1_TFLG_ADB_INT (0x1 << 9)
/*
* This flag when present in a SEQUENCE OF, SET OF or EXPLICIT causes
* indefinite length constructed encoding to be used if required.
*/
#define ASN1_TFLG_NDEF (0x1 << 11)
/* Field is embedded and not a pointer */
#define ASN1_TFLG_EMBED (0x1 << 12)
/* This is the actual ASN1 item itself */
struct ASN1_ITEM_st {
char itype; /* The item type, primitive, SEQUENCE, CHOICE
* or extern */
long utype; /* underlying type */
const ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains
* the contents */
long tcount; /* Number of templates if SEQUENCE or CHOICE */
const void *funcs; /* further data and type-specific functions */
/* funcs can be ASN1_PRIMITIVE_FUNCS*, ASN1_EXTERN_FUNCS*, or ASN1_AUX* */
long size; /* Structure size (usually) */
const char *sname; /* Structure name */
};
/*
* Cache for ASN1 tag and length, so we don't keep re-reading it for things
* like CHOICE
*/
struct ASN1_TLC_st {
char valid; /* Values below are valid */
int ret; /* return value */
long plen; /* length */
int ptag; /* class value */
int pclass; /* class value */
int hdrlen; /* header length */
};
/* Typedefs for ASN1 function pointers */
typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
const ASN1_ITEM *it, int tag, int aclass, char opt,
ASN1_TLC *ctx);
typedef int ASN1_ex_d2i_ex(ASN1_VALUE **pval, const unsigned char **in, long len,
const ASN1_ITEM *it, int tag, int aclass, char opt,
ASN1_TLC *ctx, OSSL_LIB_CTX *libctx,
const char *propq);
typedef int ASN1_ex_i2d(const ASN1_VALUE **pval, unsigned char **out,
const ASN1_ITEM *it, int tag, int aclass);
typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it);
typedef int ASN1_ex_new_ex_func(ASN1_VALUE **pval, const ASN1_ITEM *it,
OSSL_LIB_CTX *libctx, const char *propq);
typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it);
typedef int ASN1_ex_print_func(BIO *out, const ASN1_VALUE **pval,
int indent, const char *fname,
const ASN1_PCTX *pctx);
typedef int ASN1_primitive_i2c(const ASN1_VALUE **pval, unsigned char *cont,
int *putype, const ASN1_ITEM *it);
typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont,
int len, int utype, char *free_cont,
const ASN1_ITEM *it);
typedef int ASN1_primitive_print(BIO *out, const ASN1_VALUE **pval,
const ASN1_ITEM *it, int indent,
const ASN1_PCTX *pctx);
typedef struct ASN1_EXTERN_FUNCS_st {
void *app_data;
ASN1_ex_new_func *asn1_ex_new;
ASN1_ex_free_func *asn1_ex_free;
ASN1_ex_free_func *asn1_ex_clear;
ASN1_ex_d2i *asn1_ex_d2i;
ASN1_ex_i2d *asn1_ex_i2d;
ASN1_ex_print_func *asn1_ex_print;
ASN1_ex_new_ex_func *asn1_ex_new_ex;
ASN1_ex_d2i_ex *asn1_ex_d2i_ex;
} ASN1_EXTERN_FUNCS;
typedef struct ASN1_PRIMITIVE_FUNCS_st {
void *app_data;
unsigned long flags;
ASN1_ex_new_func *prim_new;
ASN1_ex_free_func *prim_free;
ASN1_ex_free_func *prim_clear;
ASN1_primitive_c2i *prim_c2i;
ASN1_primitive_i2c *prim_i2c;
ASN1_primitive_print *prim_print;
} ASN1_PRIMITIVE_FUNCS;
/*
* This is the ASN1_AUX structure: it handles various miscellaneous
* requirements. For example the use of reference counts and an informational
* callback. The "informational callback" is called at various points during
* the ASN1 encoding and decoding. It can be used to provide minor
* customisation of the structures used. This is most useful where the
* supplied routines *almost* do the right thing but need some extra help at
* a few points. If the callback returns zero then it is assumed a fatal
* error has occurred and the main operation should be abandoned. If major
* changes in the default behaviour are required then an external type is
* more appropriate.
* For the operations ASN1_OP_I2D_PRE, ASN1_OP_I2D_POST, ASN1_OP_PRINT_PRE, and
* ASN1_OP_PRINT_POST, meanwhile a variant of the callback with const parameter
* 'in' is provided to make clear statically that its input is not modified. If
* and only if this variant is in use the flag ASN1_AFLG_CONST_CB must be set.
*/
typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it,
void *exarg);
typedef int ASN1_aux_const_cb(int operation, const ASN1_VALUE **in,
const ASN1_ITEM *it, void *exarg);
typedef struct ASN1_AUX_st {
void *app_data;
int flags;
int ref_offset; /* Offset of reference value */
int ref_lock; /* Offset of lock value */
ASN1_aux_cb *asn1_cb;
int enc_offset; /* Offset of ASN1_ENCODING structure */
ASN1_aux_const_cb *asn1_const_cb; /* for ASN1_OP_I2D_ and ASN1_OP_PRINT_ */
} ASN1_AUX;
/* For print related callbacks exarg points to this structure */
typedef struct ASN1_PRINT_ARG_st {
BIO *out;
int indent;
const ASN1_PCTX *pctx;
} ASN1_PRINT_ARG;
/* For streaming related callbacks exarg points to this structure */
typedef struct ASN1_STREAM_ARG_st {
/* BIO to stream through */
BIO *out;
/* BIO with filters appended */
BIO *ndef_bio;
/* Streaming I/O boundary */
unsigned char **boundary;
} ASN1_STREAM_ARG;
/* Flags in ASN1_AUX */
/* Use a reference count */
#define ASN1_AFLG_REFCOUNT 1
/* Save the encoding of structure (useful for signatures) */
#define ASN1_AFLG_ENCODING 2
/* The Sequence length is invalid */
#define ASN1_AFLG_BROKEN 4
/* Use the new asn1_const_cb */
#define ASN1_AFLG_CONST_CB 8
/* operation values for asn1_cb */
#define ASN1_OP_NEW_PRE 0
#define ASN1_OP_NEW_POST 1
#define ASN1_OP_FREE_PRE 2
#define ASN1_OP_FREE_POST 3
#define ASN1_OP_D2I_PRE 4
#define ASN1_OP_D2I_POST 5
#define ASN1_OP_I2D_PRE 6
#define ASN1_OP_I2D_POST 7
#define ASN1_OP_PRINT_PRE 8
#define ASN1_OP_PRINT_POST 9
#define ASN1_OP_STREAM_PRE 10
#define ASN1_OP_STREAM_POST 11
#define ASN1_OP_DETACHED_PRE 12
#define ASN1_OP_DETACHED_POST 13
#define ASN1_OP_DUP_PRE 14
#define ASN1_OP_DUP_POST 15
#define ASN1_OP_GET0_LIBCTX 16
#define ASN1_OP_GET0_PROPQ 17
/* Macro to implement a primitive type */
#define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0)
#define IMPLEMENT_ASN1_TYPE_ex(itname, vname, ex) \
ASN1_ITEM_start(itname) \
ASN1_ITYPE_PRIMITIVE, \
V_##vname, NULL, 0, NULL, ex, #itname ASN1_ITEM_end(itname)
/* Macro to implement a multi string type */
#define IMPLEMENT_ASN1_MSTRING(itname, mask) \
ASN1_ITEM_start(itname) \
ASN1_ITYPE_MSTRING, \
mask, NULL, 0, NULL, sizeof(ASN1_STRING), #itname ASN1_ITEM_end(itname)
#define IMPLEMENT_EXTERN_ASN1(sname, tag, fptrs) \
ASN1_ITEM_start(sname) \
ASN1_ITYPE_EXTERN, \
tag, \
NULL, \
0, \
&fptrs, \
0, \
#sname ASN1_ITEM_end(sname)
/* Macro to implement standard functions in terms of ASN1_ITEM structures */
#define IMPLEMENT_ASN1_FUNCTIONS(stname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, stname, stname)
#define IMPLEMENT_ASN1_FUNCTIONS_name(stname, itname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, itname)
#define IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name(stname, itname) \
IMPLEMENT_ASN1_FUNCTIONS_ENCODE_fname(stname, itname, itname)
#define IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(stname) \
IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(static, stname, stname, stname)
#define IMPLEMENT_ASN1_ALLOC_FUNCTIONS(stname) \
IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, stname, stname)
#define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(pre, stname, itname, fname) \
pre stname *fname##_new(void) \
{ \
return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \
} \
pre void fname##_free(stname *a) \
{ \
ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \
}
#define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) \
stname *fname##_new(void) \
{ \
return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \
} \
void fname##_free(stname *a) \
{ \
ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \
}
#define IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, fname) \
IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \
IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname)
#define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \
stname *d2i_##fname(stname **a, const unsigned char **in, long len) \
{ \
return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname)); \
} \
int i2d_##fname(const stname *a, unsigned char **out) \
{ \
return ASN1_item_i2d((const ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname)); \
}
#define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \
int i2d_##stname##_NDEF(const stname *a, unsigned char **out) \
{ \
return ASN1_item_ndef_i2d((const ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname)); \
}
#define IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(stname) \
static stname *d2i_##stname(stname **a, \
const unsigned char **in, long len) \
{ \
return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, \
ASN1_ITEM_rptr(stname)); \
} \
static int i2d_##stname(const stname *a, unsigned char **out) \
{ \
return ASN1_item_i2d((const ASN1_VALUE *)a, out, \
ASN1_ITEM_rptr(stname)); \
}
#define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \
stname *stname##_dup(const stname *x) \
{ \
return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \
}
#define IMPLEMENT_ASN1_PRINT_FUNCTION(stname) \
IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname)
#define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \
int fname##_print_ctx(BIO *out, const stname *x, int indent, \
const ASN1_PCTX *pctx) \
{ \
return ASN1_item_print(out, (const ASN1_VALUE *)x, indent, \
ASN1_ITEM_rptr(itname), pctx); \
}
/* external definitions for primitive types */
DECLARE_ASN1_ITEM(ASN1_BOOLEAN)
DECLARE_ASN1_ITEM(ASN1_TBOOLEAN)
DECLARE_ASN1_ITEM(ASN1_FBOOLEAN)
DECLARE_ASN1_ITEM(ASN1_SEQUENCE)
DECLARE_ASN1_ITEM(CBIGNUM)
DECLARE_ASN1_ITEM(BIGNUM)
DECLARE_ASN1_ITEM(INT32)
DECLARE_ASN1_ITEM(ZINT32)
DECLARE_ASN1_ITEM(UINT32)
DECLARE_ASN1_ITEM(ZUINT32)
DECLARE_ASN1_ITEM(INT64)
DECLARE_ASN1_ITEM(ZINT64)
DECLARE_ASN1_ITEM(UINT64)
DECLARE_ASN1_ITEM(ZUINT64)
#ifndef OPENSSL_NO_DEPRECATED_3_0
/*
* LONG and ZLONG are strongly discouraged for use as stored data, as the
* underlying C type (long) differs in size depending on the architecture.
* They are designed with 32-bit longs in mind.
*/
DECLARE_ASN1_ITEM(LONG)
DECLARE_ASN1_ITEM(ZLONG)
#endif
/* clang-format off */
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_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))
#define sk_ASN1_VALUE_delete(sk, i) ((ASN1_VALUE *)OPENSSL_sk_delete(ossl_check_ASN1_VALUE_sk_type(sk), (i)))
#define sk_ASN1_VALUE_delete_ptr(sk, ptr) ((ASN1_VALUE *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)))
#define sk_ASN1_VALUE_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr))
#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_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))
#define sk_ASN1_VALUE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr))
#define sk_ASN1_VALUE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr), pnum)
#define sk_ASN1_VALUE_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_VALUE_sk_type(sk))
#define sk_ASN1_VALUE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_VALUE_sk_type(sk))
#define sk_ASN1_VALUE_dup(sk) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_dup(ossl_check_const_ASN1_VALUE_sk_type(sk)))
#define sk_ASN1_VALUE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_copyfunc_type(copyfunc), ossl_check_ASN1_VALUE_freefunc_type(freefunc)))
#define sk_ASN1_VALUE_set_cmp_func(sk, cmp) ((sk_ASN1_VALUE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_compfunc_type(cmp)))
/* clang-format on */
/* Functions used internally by the ASN1 code */
int ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it);
void ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
const ASN1_ITEM *it, int tag, int aclass, char opt,
ASN1_TLC *ctx);
int ASN1_item_ex_i2d(const ASN1_VALUE **pval, unsigned char **out,
const ASN1_ITEM *it, int tag, int aclass);
/* Legacy compatibility */
#define IMPLEMENT_ASN1_FUNCTIONS_const(name) IMPLEMENT_ASN1_FUNCTIONS(name)
#define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \
IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname)
#ifdef __cplusplus
}
#endif
#endif
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,741 @@
/*
* WARNING: do not edit!
* Generated by Makefile from include/openssl/cmp.h.in
*
* Copyright 2007-2026 The OpenSSL Project Authors. All Rights Reserved.
* Copyright Nokia 2007-2019
* Copyright Siemens AG 2015-2019
*
* 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
*/
/* clang-format off */
/* clang-format on */
#ifndef OPENSSL_CMP_H
#define OPENSSL_CMP_H
#include <openssl/opensslconf.h>
#ifndef OPENSSL_NO_CMP
#include <openssl/crmf.h>
#include <openssl/cmperr.h>
#include <openssl/cmp_util.h>
#include <openssl/http.h>
/* explicit #includes not strictly needed since implied by the above: */
#include <openssl/types.h>
#include <openssl/safestack.h>
#include <openssl/x509.h>
#include <openssl/x509v3.h>
#ifdef __cplusplus
extern "C" {
#endif
#define OSSL_CMP_PVNO_2 2
#define OSSL_CMP_PVNO_3 3
#define OSSL_CMP_PVNO OSSL_CMP_PVNO_2 /* v2 is the default */
/*-
* PKIFailureInfo ::= BIT STRING {
* -- since we can fail in more than one way!
* -- More codes may be added in the future if/when required.
* badAlg (0),
* -- unrecognized or unsupported Algorithm Identifier
* badMessageCheck (1),
* -- integrity check failed (e.g., signature did not verify)
* badRequest (2),
* -- transaction not permitted or supported
* badTime (3),
* -- messageTime was not sufficiently close to the system time,
* -- as defined by local policy
* badCertId (4),
* -- no certificate could be found matching the provided criteria
* badDataFormat (5),
* -- the data submitted has the wrong format
* wrongAuthority (6),
* -- the authority indicated in the request is different from the
* -- one creating the response token
* incorrectData (7),
* -- the requester's data is incorrect (for notary services)
* missingTimeStamp (8),
* -- when the timestamp is missing but should be there
* -- (by policy)
* badPOP (9),
* -- the proof-of-possession failed
* certRevoked (10),
* -- the certificate has already been revoked
* certConfirmed (11),
* -- the certificate has already been confirmed
* wrongIntegrity (12),
* -- invalid integrity, password based instead of signature or
* -- vice versa
* badRecipientNonce (13),
* -- invalid recipient nonce, either missing or wrong value
* timeNotAvailable (14),
* -- the TSA's time source is not available
* unacceptedPolicy (15),
* -- the requested TSA policy is not supported by the TSA.
* unacceptedExtension (16),
* -- the requested extension is not supported by the TSA.
* addInfoNotAvailable (17),
* -- the additional information requested could not be
* -- understood or is not available
* badSenderNonce (18),
* -- invalid sender nonce, either missing or wrong size
* badCertTemplate (19),
* -- invalid cert. template or missing mandatory information
* signerNotTrusted (20),
* -- signer of the message unknown or not trusted
* transactionIdInUse (21),
* -- the transaction identifier is already in use
* unsupportedVersion (22),
* -- the version of the message is not supported
* notAuthorized (23),
* -- the sender was not authorized to make the preceding
* -- request or perform the preceding action
* systemUnavail (24),
* -- the request cannot be handled due to system unavailability
* systemFailure (25),
* -- the request cannot be handled due to system failure
* duplicateCertReq (26)
* -- certificate cannot be issued because a duplicate
* -- certificate already exists
* }
*/
#define OSSL_CMP_PKIFAILUREINFO_badAlg 0
#define OSSL_CMP_PKIFAILUREINFO_badMessageCheck 1
#define OSSL_CMP_PKIFAILUREINFO_badRequest 2
#define OSSL_CMP_PKIFAILUREINFO_badTime 3
#define OSSL_CMP_PKIFAILUREINFO_badCertId 4
#define OSSL_CMP_PKIFAILUREINFO_badDataFormat 5
#define OSSL_CMP_PKIFAILUREINFO_wrongAuthority 6
#define OSSL_CMP_PKIFAILUREINFO_incorrectData 7
#define OSSL_CMP_PKIFAILUREINFO_missingTimeStamp 8
#define OSSL_CMP_PKIFAILUREINFO_badPOP 9
#define OSSL_CMP_PKIFAILUREINFO_certRevoked 10
#define OSSL_CMP_PKIFAILUREINFO_certConfirmed 11
#define OSSL_CMP_PKIFAILUREINFO_wrongIntegrity 12
#define OSSL_CMP_PKIFAILUREINFO_badRecipientNonce 13
#define OSSL_CMP_PKIFAILUREINFO_timeNotAvailable 14
#define OSSL_CMP_PKIFAILUREINFO_unacceptedPolicy 15
#define OSSL_CMP_PKIFAILUREINFO_unacceptedExtension 16
#define OSSL_CMP_PKIFAILUREINFO_addInfoNotAvailable 17
#define OSSL_CMP_PKIFAILUREINFO_badSenderNonce 18
#define OSSL_CMP_PKIFAILUREINFO_badCertTemplate 19
#define OSSL_CMP_PKIFAILUREINFO_signerNotTrusted 20
#define OSSL_CMP_PKIFAILUREINFO_transactionIdInUse 21
#define OSSL_CMP_PKIFAILUREINFO_unsupportedVersion 22
#define OSSL_CMP_PKIFAILUREINFO_notAuthorized 23
#define OSSL_CMP_PKIFAILUREINFO_systemUnavail 24
#define OSSL_CMP_PKIFAILUREINFO_systemFailure 25
#define OSSL_CMP_PKIFAILUREINFO_duplicateCertReq 26
#define OSSL_CMP_PKIFAILUREINFO_MAX 26
#define OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN \
((1 << (OSSL_CMP_PKIFAILUREINFO_MAX + 1)) - 1)
#if OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN > INT_MAX
#error CMP_PKIFAILUREINFO_MAX bit pattern does not fit in type int
#endif
typedef ASN1_BIT_STRING OSSL_CMP_PKIFAILUREINFO;
#define OSSL_CMP_CTX_FAILINFO_badAlg (1 << 0)
#define OSSL_CMP_CTX_FAILINFO_badMessageCheck (1 << 1)
#define OSSL_CMP_CTX_FAILINFO_badRequest (1 << 2)
#define OSSL_CMP_CTX_FAILINFO_badTime (1 << 3)
#define OSSL_CMP_CTX_FAILINFO_badCertId (1 << 4)
#define OSSL_CMP_CTX_FAILINFO_badDataFormat (1 << 5)
#define OSSL_CMP_CTX_FAILINFO_wrongAuthority (1 << 6)
#define OSSL_CMP_CTX_FAILINFO_incorrectData (1 << 7)
#define OSSL_CMP_CTX_FAILINFO_missingTimeStamp (1 << 8)
#define OSSL_CMP_CTX_FAILINFO_badPOP (1 << 9)
#define OSSL_CMP_CTX_FAILINFO_certRevoked (1 << 10)
#define OSSL_CMP_CTX_FAILINFO_certConfirmed (1 << 11)
#define OSSL_CMP_CTX_FAILINFO_wrongIntegrity (1 << 12)
#define OSSL_CMP_CTX_FAILINFO_badRecipientNonce (1 << 13)
#define OSSL_CMP_CTX_FAILINFO_timeNotAvailable (1 << 14)
#define OSSL_CMP_CTX_FAILINFO_unacceptedPolicy (1 << 15)
#define OSSL_CMP_CTX_FAILINFO_unacceptedExtension (1 << 16)
#define OSSL_CMP_CTX_FAILINFO_addInfoNotAvailable (1 << 17)
#define OSSL_CMP_CTX_FAILINFO_badSenderNonce (1 << 18)
#define OSSL_CMP_CTX_FAILINFO_badCertTemplate (1 << 19)
#define OSSL_CMP_CTX_FAILINFO_signerNotTrusted (1 << 20)
#define OSSL_CMP_CTX_FAILINFO_transactionIdInUse (1 << 21)
#define OSSL_CMP_CTX_FAILINFO_unsupportedVersion (1 << 22)
#define OSSL_CMP_CTX_FAILINFO_notAuthorized (1 << 23)
#define OSSL_CMP_CTX_FAILINFO_systemUnavail (1 << 24)
#define OSSL_CMP_CTX_FAILINFO_systemFailure (1 << 25)
#define OSSL_CMP_CTX_FAILINFO_duplicateCertReq (1 << 26)
/*-
* PKIStatus ::= INTEGER {
* accepted (0),
* -- you got exactly what you asked for
* grantedWithMods (1),
* -- you got something like what you asked for; the
* -- requester is responsible for ascertaining the differences
* rejection (2),
* -- you don't get it, more information elsewhere in the message
* waiting (3),
* -- the request body part has not yet been processed; expect to
* -- hear more later (note: proper handling of this status
* -- response MAY use the polling req/rep PKIMessages specified
* -- in Section 5.3.22; alternatively, polling in the underlying
* -- transport layer MAY have some utility in this regard)
* revocationWarning (4),
* -- this message contains a warning that a revocation is
* -- imminent
* revocationNotification (5),
* -- notification that a revocation has occurred
* keyUpdateWarning (6)
* -- update already done for the oldCertId specified in
* -- CertReqMsg
* }
*/
#define OSSL_CMP_PKISTATUS_rejected_by_client -5
#define OSSL_CMP_PKISTATUS_checking_response -4
#define OSSL_CMP_PKISTATUS_request -3
#define OSSL_CMP_PKISTATUS_trans -2
#define OSSL_CMP_PKISTATUS_unspecified -1
#define OSSL_CMP_PKISTATUS_accepted 0
#define OSSL_CMP_PKISTATUS_grantedWithMods 1
#define OSSL_CMP_PKISTATUS_rejection 2
#define OSSL_CMP_PKISTATUS_waiting 3
#define OSSL_CMP_PKISTATUS_revocationWarning 4
#define OSSL_CMP_PKISTATUS_revocationNotification 5
#define OSSL_CMP_PKISTATUS_keyUpdateWarning 6
typedef ASN1_INTEGER OSSL_CMP_PKISTATUS;
DECLARE_ASN1_ITEM(OSSL_CMP_PKISTATUS)
#define OSSL_CMP_CERTORENCCERT_CERTIFICATE 0
#define OSSL_CMP_CERTORENCCERT_ENCRYPTEDCERT 1
/* data type declarations */
typedef struct ossl_cmp_ctx_st OSSL_CMP_CTX;
typedef struct ossl_cmp_pkiheader_st OSSL_CMP_PKIHEADER;
DECLARE_ASN1_FUNCTIONS(OSSL_CMP_PKIHEADER)
typedef struct ossl_cmp_msg_st OSSL_CMP_MSG;
DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_MSG)
DECLARE_ASN1_ENCODE_FUNCTIONS(OSSL_CMP_MSG, OSSL_CMP_MSG, OSSL_CMP_MSG)
typedef struct ossl_cmp_certstatus_st OSSL_CMP_CERTSTATUS;
/* clang-format off */
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_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))
#define sk_OSSL_CMP_CERTSTATUS_delete(sk, i) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), (i)))
#define sk_OSSL_CMP_CERTSTATUS_delete_ptr(sk, ptr) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)))
#define sk_OSSL_CMP_CERTSTATUS_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr))
#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_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))
#define sk_OSSL_CMP_CERTSTATUS_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr))
#define sk_OSSL_CMP_CERTSTATUS_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr), pnum)
#define sk_OSSL_CMP_CERTSTATUS_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk))
#define sk_OSSL_CMP_CERTSTATUS_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk))
#define sk_OSSL_CMP_CERTSTATUS_dup(sk) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk)))
#define sk_OSSL_CMP_CERTSTATUS_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_CERTSTATUS_freefunc_type(freefunc)))
#define sk_OSSL_CMP_CERTSTATUS_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_CERTSTATUS_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_compfunc_type(cmp)))
/* clang-format on */
typedef struct ossl_cmp_itav_st OSSL_CMP_ITAV;
DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_ITAV)
/* clang-format off */
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_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))
#define sk_OSSL_CMP_ITAV_delete(sk, i) ((OSSL_CMP_ITAV *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_ITAV_sk_type(sk), (i)))
#define sk_OSSL_CMP_ITAV_delete_ptr(sk, ptr) ((OSSL_CMP_ITAV *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)))
#define sk_OSSL_CMP_ITAV_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr))
#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_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))
#define sk_OSSL_CMP_ITAV_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr))
#define sk_OSSL_CMP_ITAV_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr), pnum)
#define sk_OSSL_CMP_ITAV_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_ITAV_sk_type(sk))
#define sk_OSSL_CMP_ITAV_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk))
#define sk_OSSL_CMP_ITAV_dup(sk) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk)))
#define sk_OSSL_CMP_ITAV_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_ITAV_freefunc_type(freefunc)))
#define sk_OSSL_CMP_ITAV_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_ITAV_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_compfunc_type(cmp)))
/* clang-format on */
typedef struct ossl_cmp_crlstatus_st OSSL_CMP_CRLSTATUS;
/* clang-format off */
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_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))
#define sk_OSSL_CMP_CRLSTATUS_delete(sk, i) ((OSSL_CMP_CRLSTATUS *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), (i)))
#define sk_OSSL_CMP_CRLSTATUS_delete_ptr(sk, ptr) ((OSSL_CMP_CRLSTATUS *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CRLSTATUS_type(ptr)))
#define sk_OSSL_CMP_CRLSTATUS_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CRLSTATUS_type(ptr))
#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_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))
#define sk_OSSL_CMP_CRLSTATUS_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CRLSTATUS_type(ptr))
#define sk_OSSL_CMP_CRLSTATUS_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CRLSTATUS_type(ptr), pnum)
#define sk_OSSL_CMP_CRLSTATUS_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk))
#define sk_OSSL_CMP_CRLSTATUS_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_CRLSTATUS_sk_type(sk))
#define sk_OSSL_CMP_CRLSTATUS_dup(sk) ((STACK_OF(OSSL_CMP_CRLSTATUS) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_CRLSTATUS_sk_type(sk)))
#define sk_OSSL_CMP_CRLSTATUS_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_CRLSTATUS) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_CRLSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CRLSTATUS_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_CRLSTATUS_freefunc_type(freefunc)))
#define sk_OSSL_CMP_CRLSTATUS_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_CRLSTATUS_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CRLSTATUS_compfunc_type(cmp)))
/* clang-format on */
typedef OSSL_CRMF_ATTRIBUTETYPEANDVALUE OSSL_CMP_ATAV;
#define OSSL_CMP_ATAV_free OSSL_CRMF_ATTRIBUTETYPEANDVALUE_free
typedef STACK_OF(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) OSSL_CMP_ATAVS;
DECLARE_ASN1_FUNCTIONS(OSSL_CMP_ATAVS)
#define stack_st_OSSL_CMP_ATAV stack_st_OSSL_CRMF_ATTRIBUTETYPEANDVALUE
#define sk_OSSL_CMP_ATAV_num sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_num
#define sk_OSSL_CMP_ATAV_value sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_value
#define sk_OSSL_CMP_ATAV_push sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_push
#define sk_OSSL_CMP_ATAV_pop_free sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_pop_free
typedef struct ossl_cmp_revrepcontent_st OSSL_CMP_REVREPCONTENT;
typedef struct ossl_cmp_pkisi_st OSSL_CMP_PKISI;
DECLARE_ASN1_FUNCTIONS(OSSL_CMP_PKISI)
DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_PKISI)
/* clang-format off */
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_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))
#define sk_OSSL_CMP_PKISI_delete(sk, i) ((OSSL_CMP_PKISI *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_PKISI_sk_type(sk), (i)))
#define sk_OSSL_CMP_PKISI_delete_ptr(sk, ptr) ((OSSL_CMP_PKISI *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)))
#define sk_OSSL_CMP_PKISI_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr))
#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_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))
#define sk_OSSL_CMP_PKISI_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr))
#define sk_OSSL_CMP_PKISI_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr), pnum)
#define sk_OSSL_CMP_PKISI_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_PKISI_sk_type(sk))
#define sk_OSSL_CMP_PKISI_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk))
#define sk_OSSL_CMP_PKISI_dup(sk) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk)))
#define sk_OSSL_CMP_PKISI_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_PKISI_freefunc_type(freefunc)))
#define sk_OSSL_CMP_PKISI_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_PKISI_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_compfunc_type(cmp)))
/* clang-format on */
typedef struct ossl_cmp_certrepmessage_st OSSL_CMP_CERTREPMESSAGE;
/* clang-format off */
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_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))
#define sk_OSSL_CMP_CERTREPMESSAGE_delete(sk, i) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (i)))
#define sk_OSSL_CMP_CERTREPMESSAGE_delete_ptr(sk, ptr) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)))
#define sk_OSSL_CMP_CERTREPMESSAGE_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr))
#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_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))
#define sk_OSSL_CMP_CERTREPMESSAGE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr))
#define sk_OSSL_CMP_CERTREPMESSAGE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr), pnum)
#define sk_OSSL_CMP_CERTREPMESSAGE_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk))
#define sk_OSSL_CMP_CERTREPMESSAGE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk))
#define sk_OSSL_CMP_CERTREPMESSAGE_dup(sk) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)))
#define sk_OSSL_CMP_CERTREPMESSAGE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_CERTREPMESSAGE_freefunc_type(freefunc)))
#define sk_OSSL_CMP_CERTREPMESSAGE_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_CERTREPMESSAGE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_compfunc_type(cmp)))
/* clang-format on */
typedef struct ossl_cmp_pollrep_st OSSL_CMP_POLLREP;
typedef STACK_OF(OSSL_CMP_POLLREP) OSSL_CMP_POLLREPCONTENT;
typedef struct ossl_cmp_certresponse_st OSSL_CMP_CERTRESPONSE;
/* clang-format off */
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_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))
#define sk_OSSL_CMP_CERTRESPONSE_delete(sk, i) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), (i)))
#define sk_OSSL_CMP_CERTRESPONSE_delete_ptr(sk, ptr) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)))
#define sk_OSSL_CMP_CERTRESPONSE_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr))
#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_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))
#define sk_OSSL_CMP_CERTRESPONSE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr))
#define sk_OSSL_CMP_CERTRESPONSE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr), pnum)
#define sk_OSSL_CMP_CERTRESPONSE_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk))
#define sk_OSSL_CMP_CERTRESPONSE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk))
#define sk_OSSL_CMP_CERTRESPONSE_dup(sk) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk)))
#define sk_OSSL_CMP_CERTRESPONSE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_CERTRESPONSE_freefunc_type(freefunc)))
#define sk_OSSL_CMP_CERTRESPONSE_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_CERTRESPONSE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_compfunc_type(cmp)))
/* clang-format on */
typedef STACK_OF(ASN1_UTF8STRING) OSSL_CMP_PKIFREETEXT;
/*
* function DECLARATIONS
*/
/* from cmp_asn.c */
OSSL_CMP_ITAV *OSSL_CMP_ITAV_create(ASN1_OBJECT *type, ASN1_TYPE *value);
void OSSL_CMP_ITAV_set0(OSSL_CMP_ITAV *itav, ASN1_OBJECT *type,
ASN1_TYPE *value);
ASN1_OBJECT *OSSL_CMP_ITAV_get0_type(const OSSL_CMP_ITAV *itav);
ASN1_TYPE *OSSL_CMP_ITAV_get0_value(const OSSL_CMP_ITAV *itav);
int OSSL_CMP_ITAV_push0_stack_item(STACK_OF(OSSL_CMP_ITAV) **sk_p,
OSSL_CMP_ITAV *itav);
void OSSL_CMP_ITAV_free(OSSL_CMP_ITAV *itav);
OSSL_CMP_ITAV *OSSL_CMP_ITAV_new0_certProfile(STACK_OF(ASN1_UTF8STRING)
*certProfile);
int OSSL_CMP_ITAV_get0_certProfile(const OSSL_CMP_ITAV *itav,
STACK_OF(ASN1_UTF8STRING) **out);
OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_caCerts(const STACK_OF(X509) *caCerts);
int OSSL_CMP_ITAV_get0_caCerts(const OSSL_CMP_ITAV *itav, STACK_OF(X509) **out);
OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_rootCaCert(const X509 *rootCaCert);
int OSSL_CMP_ITAV_get0_rootCaCert(const OSSL_CMP_ITAV *itav, X509 **out);
OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_rootCaKeyUpdate(const X509 *newWithNew,
const X509 *newWithOld,
const X509 *oldWithNew);
int OSSL_CMP_ITAV_get0_rootCaKeyUpdate(const OSSL_CMP_ITAV *itav,
X509 **newWithNew,
X509 **newWithOld,
X509 **oldWithNew);
OSSL_CMP_CRLSTATUS *OSSL_CMP_CRLSTATUS_create(const X509_CRL *crl,
const X509 *cert, int only_DN);
OSSL_CMP_CRLSTATUS *OSSL_CMP_CRLSTATUS_new1(const DIST_POINT_NAME *dpn,
const GENERAL_NAMES *issuer,
const ASN1_TIME *thisUpdate);
int OSSL_CMP_CRLSTATUS_get0(const OSSL_CMP_CRLSTATUS *crlstatus,
DIST_POINT_NAME **dpn, GENERAL_NAMES **issuer,
ASN1_TIME **thisUpdate);
void OSSL_CMP_CRLSTATUS_free(OSSL_CMP_CRLSTATUS *crlstatus);
OSSL_CMP_ITAV
*OSSL_CMP_ITAV_new0_crlStatusList(STACK_OF(OSSL_CMP_CRLSTATUS) *crlStatusList);
int OSSL_CMP_ITAV_get0_crlStatusList(const OSSL_CMP_ITAV *itav,
STACK_OF(OSSL_CMP_CRLSTATUS) **out);
OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_crls(const X509_CRL *crls);
int OSSL_CMP_ITAV_get0_crls(const OSSL_CMP_ITAV *it, STACK_OF(X509_CRL) **out);
OSSL_CMP_ITAV
*OSSL_CMP_ITAV_new0_certReqTemplate(OSSL_CRMF_CERTTEMPLATE *certTemplate,
OSSL_CMP_ATAVS *keySpec);
int OSSL_CMP_ITAV_get1_certReqTemplate(const OSSL_CMP_ITAV *itav,
OSSL_CRMF_CERTTEMPLATE **certTemplate,
OSSL_CMP_ATAVS **keySpec);
OSSL_CMP_ATAV *OSSL_CMP_ATAV_create(ASN1_OBJECT *type, ASN1_TYPE *value);
void OSSL_CMP_ATAV_set0(OSSL_CMP_ATAV *itav, ASN1_OBJECT *type,
ASN1_TYPE *value);
ASN1_OBJECT *OSSL_CMP_ATAV_get0_type(const OSSL_CMP_ATAV *itav);
ASN1_TYPE *OSSL_CMP_ATAV_get0_value(const OSSL_CMP_ATAV *itav);
OSSL_CMP_ATAV *OSSL_CMP_ATAV_new_algId(const X509_ALGOR *alg);
X509_ALGOR *OSSL_CMP_ATAV_get0_algId(const OSSL_CMP_ATAV *atav);
OSSL_CMP_ATAV *OSSL_CMP_ATAV_new_rsaKeyLen(int len);
int OSSL_CMP_ATAV_get_rsaKeyLen(const OSSL_CMP_ATAV *atav);
int OSSL_CMP_ATAV_push1(OSSL_CMP_ATAVS **sk_p, const OSSL_CMP_ATAV *atav);
void OSSL_CMP_MSG_free(OSSL_CMP_MSG *msg);
/* from cmp_ctx.c */
OSSL_CMP_CTX *OSSL_CMP_CTX_new(OSSL_LIB_CTX *libctx, const char *propq);
void OSSL_CMP_CTX_free(OSSL_CMP_CTX *ctx);
int OSSL_CMP_CTX_reinit(OSSL_CMP_CTX *ctx);
OSSL_LIB_CTX *OSSL_CMP_CTX_get0_libctx(const OSSL_CMP_CTX *ctx);
const char *OSSL_CMP_CTX_get0_propq(const OSSL_CMP_CTX *ctx);
/* CMP general options: */
#define OSSL_CMP_OPT_LOG_VERBOSITY 0
/* CMP transfer options: */
#define OSSL_CMP_OPT_KEEP_ALIVE 10
#define OSSL_CMP_OPT_MSG_TIMEOUT 11
#define OSSL_CMP_OPT_TOTAL_TIMEOUT 12
#define OSSL_CMP_OPT_USE_TLS 13
/* CMP request options: */
#define OSSL_CMP_OPT_VALIDITY_DAYS 20
#define OSSL_CMP_OPT_SUBJECTALTNAME_NODEFAULT 21
#define OSSL_CMP_OPT_SUBJECTALTNAME_CRITICAL 22
#define OSSL_CMP_OPT_POLICIES_CRITICAL 23
#define OSSL_CMP_OPT_POPO_METHOD 24
#define OSSL_CMP_OPT_IMPLICIT_CONFIRM 25
#define OSSL_CMP_OPT_DISABLE_CONFIRM 26
#define OSSL_CMP_OPT_REVOCATION_REASON 27
/* CMP protection options: */
#define OSSL_CMP_OPT_UNPROTECTED_SEND 30
#define OSSL_CMP_OPT_UNPROTECTED_ERRORS 31
#define OSSL_CMP_OPT_OWF_ALGNID 32
#define OSSL_CMP_OPT_MAC_ALGNID 33
#define OSSL_CMP_OPT_DIGEST_ALGNID 34
#define OSSL_CMP_OPT_IGNORE_KEYUSAGE 35
#define OSSL_CMP_OPT_PERMIT_TA_IN_EXTRACERTS_FOR_IR 36
#define OSSL_CMP_OPT_NO_CACHE_EXTRACERTS 37
int OSSL_CMP_CTX_set_option(OSSL_CMP_CTX *ctx, int opt, int val);
int OSSL_CMP_CTX_get_option(const OSSL_CMP_CTX *ctx, int opt);
/* CMP-specific callback for logging and outputting the error queue: */
int OSSL_CMP_CTX_set_log_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_log_cb_t cb);
#define OSSL_CMP_CTX_set_log_verbosity(ctx, level) \
OSSL_CMP_CTX_set_option(ctx, OSSL_CMP_OPT_LOG_VERBOSITY, level)
void OSSL_CMP_CTX_print_errors(const OSSL_CMP_CTX *ctx);
/* message transfer: */
int OSSL_CMP_CTX_set1_serverPath(OSSL_CMP_CTX *ctx, const char *path);
int OSSL_CMP_CTX_set1_server(OSSL_CMP_CTX *ctx, const char *address);
int OSSL_CMP_CTX_set_serverPort(OSSL_CMP_CTX *ctx, int port);
int OSSL_CMP_CTX_set1_proxy(OSSL_CMP_CTX *ctx, const char *name);
int OSSL_CMP_CTX_set1_no_proxy(OSSL_CMP_CTX *ctx, const char *names);
#ifndef OPENSSL_NO_HTTP
int OSSL_CMP_CTX_set_http_cb(OSSL_CMP_CTX *ctx, OSSL_HTTP_bio_cb_t cb);
int OSSL_CMP_CTX_set_http_cb_arg(OSSL_CMP_CTX *ctx, void *arg);
void *OSSL_CMP_CTX_get_http_cb_arg(const OSSL_CMP_CTX *ctx);
#endif
typedef OSSL_CMP_MSG *(*OSSL_CMP_transfer_cb_t)(OSSL_CMP_CTX *ctx,
const OSSL_CMP_MSG *req);
int OSSL_CMP_CTX_set_transfer_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_transfer_cb_t cb);
int OSSL_CMP_CTX_set_transfer_cb_arg(OSSL_CMP_CTX *ctx, void *arg);
void *OSSL_CMP_CTX_get_transfer_cb_arg(const OSSL_CMP_CTX *ctx);
/* server authentication: */
int OSSL_CMP_CTX_set1_srvCert(OSSL_CMP_CTX *ctx, X509 *cert);
int OSSL_CMP_CTX_set1_expected_sender(OSSL_CMP_CTX *ctx, const X509_NAME *name);
int OSSL_CMP_CTX_set0_trustedStore(OSSL_CMP_CTX *ctx, X509_STORE *store);
#define OSSL_CMP_CTX_set0_trusted OSSL_CMP_CTX_set0_trustedStore
X509_STORE *OSSL_CMP_CTX_get0_trustedStore(const OSSL_CMP_CTX *ctx);
#define OSSL_CMP_CTX_get0_trusted OSSL_CMP_CTX_get0_trustedStore
int OSSL_CMP_CTX_set1_untrusted(OSSL_CMP_CTX *ctx, STACK_OF(X509) *certs);
STACK_OF(X509) *OSSL_CMP_CTX_get0_untrusted(const OSSL_CMP_CTX *ctx);
/* client authentication: */
int OSSL_CMP_CTX_set1_cert(OSSL_CMP_CTX *ctx, X509 *cert);
int OSSL_CMP_CTX_build_cert_chain(OSSL_CMP_CTX *ctx, X509_STORE *own_trusted,
STACK_OF(X509) *candidates);
int OSSL_CMP_CTX_set1_pkey(OSSL_CMP_CTX *ctx, EVP_PKEY *pkey);
int OSSL_CMP_CTX_set1_referenceValue(OSSL_CMP_CTX *ctx,
const unsigned char *ref, int len);
int OSSL_CMP_CTX_set1_secretValue(OSSL_CMP_CTX *ctx,
const unsigned char *sec, int len);
/* CMP message header and extra certificates: */
int OSSL_CMP_CTX_set1_recipient(OSSL_CMP_CTX *ctx, const X509_NAME *name);
int OSSL_CMP_CTX_push0_geninfo_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav);
int OSSL_CMP_CTX_reset_geninfo_ITAVs(OSSL_CMP_CTX *ctx);
STACK_OF(OSSL_CMP_ITAV)
*OSSL_CMP_CTX_get0_geninfo_ITAVs(const OSSL_CMP_CTX *ctx);
int OSSL_CMP_CTX_set1_extraCertsOut(OSSL_CMP_CTX *ctx,
STACK_OF(X509) *extraCertsOut);
/* certificate template: */
int OSSL_CMP_CTX_set0_newPkey(OSSL_CMP_CTX *ctx, int priv, EVP_PKEY *pkey);
EVP_PKEY *OSSL_CMP_CTX_get0_newPkey(const OSSL_CMP_CTX *ctx, int priv);
int OSSL_CMP_CTX_set1_issuer(OSSL_CMP_CTX *ctx, const X509_NAME *name);
int OSSL_CMP_CTX_set1_serialNumber(OSSL_CMP_CTX *ctx, const ASN1_INTEGER *sn);
int OSSL_CMP_CTX_set1_subjectName(OSSL_CMP_CTX *ctx, const X509_NAME *name);
int OSSL_CMP_CTX_push1_subjectAltName(OSSL_CMP_CTX *ctx,
const GENERAL_NAME *name);
int OSSL_CMP_CTX_set0_reqExtensions(OSSL_CMP_CTX *ctx, X509_EXTENSIONS *exts);
int OSSL_CMP_CTX_reqExtensions_have_SAN(OSSL_CMP_CTX *ctx);
int OSSL_CMP_CTX_push0_policy(OSSL_CMP_CTX *ctx, POLICYINFO *pinfo);
int OSSL_CMP_CTX_set1_oldCert(OSSL_CMP_CTX *ctx, X509 *cert);
int OSSL_CMP_CTX_set1_p10CSR(OSSL_CMP_CTX *ctx, const X509_REQ *csr);
/* misc body contents: */
int OSSL_CMP_CTX_push0_genm_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav);
/* certificate confirmation: */
typedef int (*OSSL_CMP_certConf_cb_t)(OSSL_CMP_CTX *ctx, X509 *cert,
int fail_info, const char **txt);
int OSSL_CMP_certConf_cb(OSSL_CMP_CTX *ctx, X509 *cert, int fail_info,
const char **text);
int OSSL_CMP_CTX_set_certConf_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_certConf_cb_t cb);
int OSSL_CMP_CTX_set_certConf_cb_arg(OSSL_CMP_CTX *ctx, void *arg);
void *OSSL_CMP_CTX_get_certConf_cb_arg(const OSSL_CMP_CTX *ctx);
/* result fetching: */
int OSSL_CMP_CTX_get_status(const OSSL_CMP_CTX *ctx);
OSSL_CMP_PKIFREETEXT *OSSL_CMP_CTX_get0_statusString(const OSSL_CMP_CTX *ctx);
int OSSL_CMP_CTX_get_failInfoCode(const OSSL_CMP_CTX *ctx);
#define OSSL_CMP_PKISI_BUFLEN 1024
X509 *OSSL_CMP_CTX_get0_validatedSrvCert(const OSSL_CMP_CTX *ctx);
X509 *OSSL_CMP_CTX_get0_newCert(const OSSL_CMP_CTX *ctx);
STACK_OF(X509) *OSSL_CMP_CTX_get1_newChain(const OSSL_CMP_CTX *ctx);
STACK_OF(X509) *OSSL_CMP_CTX_get1_caPubs(const OSSL_CMP_CTX *ctx);
STACK_OF(X509) *OSSL_CMP_CTX_get1_extraCertsIn(const OSSL_CMP_CTX *ctx);
int OSSL_CMP_CTX_set1_transactionID(OSSL_CMP_CTX *ctx,
const ASN1_OCTET_STRING *id);
int OSSL_CMP_CTX_set1_senderNonce(OSSL_CMP_CTX *ctx,
const ASN1_OCTET_STRING *nonce);
/* from cmp_status.c */
char *OSSL_CMP_CTX_snprint_PKIStatus(const OSSL_CMP_CTX *ctx, char *buf,
size_t bufsize);
char *OSSL_CMP_snprint_PKIStatusInfo(const OSSL_CMP_PKISI *statusInfo,
char *buf, size_t bufsize);
OSSL_CMP_PKISI *
OSSL_CMP_STATUSINFO_new(int status, int fail_info, const char *text);
/* from cmp_hdr.c */
ASN1_OCTET_STRING *OSSL_CMP_HDR_get0_transactionID(const OSSL_CMP_PKIHEADER *hdr);
ASN1_OCTET_STRING *OSSL_CMP_HDR_get0_recipNonce(const OSSL_CMP_PKIHEADER *hdr);
STACK_OF(OSSL_CMP_ITAV)
*OSSL_CMP_HDR_get0_geninfo_ITAVs(const OSSL_CMP_PKIHEADER *hdr);
/* from cmp_msg.c */
OSSL_CMP_PKIHEADER *OSSL_CMP_MSG_get0_header(const OSSL_CMP_MSG *msg);
int OSSL_CMP_MSG_get_bodytype(const OSSL_CMP_MSG *msg);
X509_PUBKEY *OSSL_CMP_MSG_get0_certreq_publickey(const OSSL_CMP_MSG *msg);
int OSSL_CMP_MSG_update_transactionID(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg);
int OSSL_CMP_MSG_update_recipNonce(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg);
OSSL_CRMF_MSG *OSSL_CMP_CTX_setup_CRM(OSSL_CMP_CTX *ctx, int for_KUR, int rid);
OSSL_CMP_MSG *OSSL_CMP_MSG_read(const char *file, OSSL_LIB_CTX *libctx,
const char *propq);
int OSSL_CMP_MSG_write(const char *file, const OSSL_CMP_MSG *msg);
OSSL_CMP_MSG *d2i_OSSL_CMP_MSG_bio(BIO *bio, OSSL_CMP_MSG **msg);
int i2d_OSSL_CMP_MSG_bio(BIO *bio, const OSSL_CMP_MSG *msg);
/* from cmp_vfy.c */
int OSSL_CMP_validate_msg(OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *msg);
int OSSL_CMP_validate_cert_path(const OSSL_CMP_CTX *ctx,
X509_STORE *trusted_store, X509 *cert);
/* from cmp_http.c */
#ifndef OPENSSL_NO_HTTP
OSSL_CMP_MSG *OSSL_CMP_MSG_http_perform(OSSL_CMP_CTX *ctx,
const OSSL_CMP_MSG *req);
#endif
/* from cmp_server.c */
typedef struct ossl_cmp_srv_ctx_st OSSL_CMP_SRV_CTX;
OSSL_CMP_MSG *OSSL_CMP_SRV_process_request(OSSL_CMP_SRV_CTX *srv_ctx,
const OSSL_CMP_MSG *req);
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,
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,
const X509_NAME *issuer,
const ASN1_INTEGER *serial);
typedef int (*OSSL_CMP_SRV_genm_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx,
const OSSL_CMP_MSG *req,
const STACK_OF(OSSL_CMP_ITAV) *in,
STACK_OF(OSSL_CMP_ITAV) **out);
typedef void (*OSSL_CMP_SRV_error_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx,
const OSSL_CMP_MSG *req,
const OSSL_CMP_PKISI *statusInfo,
const ASN1_INTEGER *errorCode,
const OSSL_CMP_PKIFREETEXT *errDetails);
typedef int (*OSSL_CMP_SRV_certConf_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx,
const OSSL_CMP_MSG *req,
int certReqId,
const ASN1_OCTET_STRING *certHash,
const OSSL_CMP_PKISI *si);
typedef int (*OSSL_CMP_SRV_pollReq_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx,
const OSSL_CMP_MSG *req, int certReqId,
OSSL_CMP_MSG **certReq,
int64_t *check_after);
int OSSL_CMP_SRV_CTX_init(OSSL_CMP_SRV_CTX *srv_ctx, void *custom_ctx,
OSSL_CMP_SRV_cert_request_cb_t process_cert_request,
OSSL_CMP_SRV_rr_cb_t process_rr,
OSSL_CMP_SRV_genm_cb_t process_genm,
OSSL_CMP_SRV_error_cb_t process_error,
OSSL_CMP_SRV_certConf_cb_t process_certConf,
OSSL_CMP_SRV_pollReq_cb_t process_pollReq);
typedef int (*OSSL_CMP_SRV_delayed_delivery_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx,
const OSSL_CMP_MSG *req);
typedef int (*OSSL_CMP_SRV_clean_transaction_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx,
const ASN1_OCTET_STRING *id);
int OSSL_CMP_SRV_CTX_init_trans(OSSL_CMP_SRV_CTX *srv_ctx,
OSSL_CMP_SRV_delayed_delivery_cb_t delay,
OSSL_CMP_SRV_clean_transaction_cb_t clean);
OSSL_CMP_CTX *OSSL_CMP_SRV_CTX_get0_cmp_ctx(const OSSL_CMP_SRV_CTX *srv_ctx);
void *OSSL_CMP_SRV_CTX_get0_custom_ctx(const OSSL_CMP_SRV_CTX *srv_ctx);
int OSSL_CMP_SRV_CTX_set_send_unprotected_errors(OSSL_CMP_SRV_CTX *srv_ctx,
int val);
int OSSL_CMP_SRV_CTX_set_accept_unprotected(OSSL_CMP_SRV_CTX *srv_ctx, int val);
int OSSL_CMP_SRV_CTX_set_accept_raverified(OSSL_CMP_SRV_CTX *srv_ctx, int val);
int OSSL_CMP_SRV_CTX_set_grant_implicit_confirm(OSSL_CMP_SRV_CTX *srv_ctx,
int val);
/* from cmp_client.c */
X509 *OSSL_CMP_exec_certreq(OSSL_CMP_CTX *ctx, int req_type,
const OSSL_CRMF_MSG *crm);
#define OSSL_CMP_IR 0
#define OSSL_CMP_CR 2
#define OSSL_CMP_P10CR 4
#define OSSL_CMP_KUR 7
#define OSSL_CMP_GENM 21
#define OSSL_CMP_ERROR 23
#define OSSL_CMP_exec_IR_ses(ctx) \
OSSL_CMP_exec_certreq(ctx, OSSL_CMP_IR, NULL)
#define OSSL_CMP_exec_CR_ses(ctx) \
OSSL_CMP_exec_certreq(ctx, OSSL_CMP_CR, NULL)
#define OSSL_CMP_exec_P10CR_ses(ctx) \
OSSL_CMP_exec_certreq(ctx, OSSL_CMP_P10CR, NULL)
#define OSSL_CMP_exec_KUR_ses(ctx) \
OSSL_CMP_exec_certreq(ctx, OSSL_CMP_KUR, NULL)
int OSSL_CMP_try_certreq(OSSL_CMP_CTX *ctx, int req_type,
const OSSL_CRMF_MSG *crm, int *checkAfter);
int OSSL_CMP_exec_RR_ses(OSSL_CMP_CTX *ctx);
STACK_OF(OSSL_CMP_ITAV) *OSSL_CMP_exec_GENM_ses(OSSL_CMP_CTX *ctx);
/* from cmp_genm.c */
int OSSL_CMP_get1_caCerts(OSSL_CMP_CTX *ctx, STACK_OF(X509) **out);
int OSSL_CMP_get1_rootCaKeyUpdate(OSSL_CMP_CTX *ctx,
const X509 *oldWithOld, X509 **newWithNew,
X509 **newWithOld, X509 **oldWithNew);
int OSSL_CMP_get1_crlUpdate(OSSL_CMP_CTX *ctx, const X509 *crlcert,
const X509_CRL *last_crl,
X509_CRL **crl);
int OSSL_CMP_get1_certReqTemplate(OSSL_CMP_CTX *ctx,
OSSL_CRMF_CERTTEMPLATE **certTemplate,
OSSL_CMP_ATAVS **keySpec);
#ifdef __cplusplus
}
#endif
#endif /* !defined(OPENSSL_NO_CMP) */
#endif /* !defined(OPENSSL_CMP_H) */
@@ -0,0 +1,515 @@
/*
* WARNING: do not edit!
* Generated by Makefile from include/openssl/cms.h.in
*
* Copyright 2008-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
*/
/* clang-format off */
/* clang-format on */
#ifndef OPENSSL_CMS_H
#define OPENSSL_CMS_H
#pragma once
#include <openssl/macros.h>
#ifndef OPENSSL_NO_DEPRECATED_3_0
#define HEADER_CMS_H
#endif
#include <openssl/opensslconf.h>
#ifndef OPENSSL_NO_CMS
#include <openssl/x509.h>
#include <openssl/x509v3.h>
#include <openssl/cmserr.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct CMS_EnvelopedData_st CMS_EnvelopedData;
typedef struct CMS_ContentInfo_st CMS_ContentInfo;
typedef struct CMS_SignerInfo_st CMS_SignerInfo;
typedef struct CMS_SignedData_st CMS_SignedData;
typedef struct CMS_CertificateChoices CMS_CertificateChoices;
typedef struct CMS_RevocationInfoChoice_st CMS_RevocationInfoChoice;
typedef struct CMS_RecipientInfo_st CMS_RecipientInfo;
typedef struct CMS_ReceiptRequest_st CMS_ReceiptRequest;
typedef struct CMS_Receipt_st CMS_Receipt;
typedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey;
typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute;
/* clang-format off */
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_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))
#define sk_CMS_SignerInfo_delete(sk, i) ((CMS_SignerInfo *)OPENSSL_sk_delete(ossl_check_CMS_SignerInfo_sk_type(sk), (i)))
#define sk_CMS_SignerInfo_delete_ptr(sk, ptr) ((CMS_SignerInfo *)OPENSSL_sk_delete_ptr(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)))
#define sk_CMS_SignerInfo_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr))
#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_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))
#define sk_CMS_SignerInfo_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr))
#define sk_CMS_SignerInfo_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr), pnum)
#define sk_CMS_SignerInfo_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_SignerInfo_sk_type(sk))
#define sk_CMS_SignerInfo_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_SignerInfo_sk_type(sk))
#define sk_CMS_SignerInfo_dup(sk) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_dup(ossl_check_const_CMS_SignerInfo_sk_type(sk)))
#define sk_CMS_SignerInfo_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_copyfunc_type(copyfunc), ossl_check_CMS_SignerInfo_freefunc_type(freefunc)))
#define sk_CMS_SignerInfo_set_cmp_func(sk, cmp) ((sk_CMS_SignerInfo_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_compfunc_type(cmp)))
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_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))
#define sk_CMS_RecipientEncryptedKey_delete(sk, i) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_delete(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), (i)))
#define sk_CMS_RecipientEncryptedKey_delete_ptr(sk, ptr) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_delete_ptr(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)))
#define sk_CMS_RecipientEncryptedKey_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr))
#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_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))
#define sk_CMS_RecipientEncryptedKey_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr))
#define sk_CMS_RecipientEncryptedKey_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr), pnum)
#define sk_CMS_RecipientEncryptedKey_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk))
#define sk_CMS_RecipientEncryptedKey_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk))
#define sk_CMS_RecipientEncryptedKey_dup(sk) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_dup(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk)))
#define sk_CMS_RecipientEncryptedKey_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_copyfunc_type(copyfunc), ossl_check_CMS_RecipientEncryptedKey_freefunc_type(freefunc)))
#define sk_CMS_RecipientEncryptedKey_set_cmp_func(sk, cmp) ((sk_CMS_RecipientEncryptedKey_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_compfunc_type(cmp)))
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_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))
#define sk_CMS_RecipientInfo_delete(sk, i) ((CMS_RecipientInfo *)OPENSSL_sk_delete(ossl_check_CMS_RecipientInfo_sk_type(sk), (i)))
#define sk_CMS_RecipientInfo_delete_ptr(sk, ptr) ((CMS_RecipientInfo *)OPENSSL_sk_delete_ptr(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)))
#define sk_CMS_RecipientInfo_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr))
#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_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))
#define sk_CMS_RecipientInfo_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr))
#define sk_CMS_RecipientInfo_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr), pnum)
#define sk_CMS_RecipientInfo_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_RecipientInfo_sk_type(sk))
#define sk_CMS_RecipientInfo_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_RecipientInfo_sk_type(sk))
#define sk_CMS_RecipientInfo_dup(sk) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_dup(ossl_check_const_CMS_RecipientInfo_sk_type(sk)))
#define sk_CMS_RecipientInfo_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_copyfunc_type(copyfunc), ossl_check_CMS_RecipientInfo_freefunc_type(freefunc)))
#define sk_CMS_RecipientInfo_set_cmp_func(sk, cmp) ((sk_CMS_RecipientInfo_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_compfunc_type(cmp)))
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_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))
#define sk_CMS_RevocationInfoChoice_delete(sk, i) ((CMS_RevocationInfoChoice *)OPENSSL_sk_delete(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), (i)))
#define sk_CMS_RevocationInfoChoice_delete_ptr(sk, ptr) ((CMS_RevocationInfoChoice *)OPENSSL_sk_delete_ptr(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)))
#define sk_CMS_RevocationInfoChoice_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr))
#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_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))
#define sk_CMS_RevocationInfoChoice_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr))
#define sk_CMS_RevocationInfoChoice_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr), pnum)
#define sk_CMS_RevocationInfoChoice_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_RevocationInfoChoice_sk_type(sk))
#define sk_CMS_RevocationInfoChoice_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk))
#define sk_CMS_RevocationInfoChoice_dup(sk) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_dup(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk)))
#define sk_CMS_RevocationInfoChoice_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_copyfunc_type(copyfunc), ossl_check_CMS_RevocationInfoChoice_freefunc_type(freefunc)))
#define sk_CMS_RevocationInfoChoice_set_cmp_func(sk, cmp) ((sk_CMS_RevocationInfoChoice_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_compfunc_type(cmp)))
/* clang-format on */
DECLARE_ASN1_ITEM(CMS_EnvelopedData)
DECLARE_ASN1_ALLOC_FUNCTIONS(CMS_SignedData)
DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo)
DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest)
DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo)
DECLARE_ASN1_DUP_FUNCTION(CMS_EnvelopedData)
CMS_ContentInfo *CMS_ContentInfo_new_ex(OSSL_LIB_CTX *libctx, const char *propq);
#define CMS_SIGNERINFO_ISSUER_SERIAL 0
#define CMS_SIGNERINFO_KEYIDENTIFIER 1
#define CMS_RECIPINFO_NONE -1
#define CMS_RECIPINFO_TRANS 0
#define CMS_RECIPINFO_AGREE 1
#define CMS_RECIPINFO_KEK 2
#define CMS_RECIPINFO_PASS 3
#define CMS_RECIPINFO_OTHER 4
/* S/MIME related flags */
#define CMS_TEXT 0x1
#define CMS_NOCERTS 0x2
#define CMS_NO_CONTENT_VERIFY 0x4
#define CMS_NO_ATTR_VERIFY 0x8
#define CMS_NOSIGS \
(CMS_NO_CONTENT_VERIFY | CMS_NO_ATTR_VERIFY)
#define CMS_NOINTERN 0x10
#define CMS_NO_SIGNER_CERT_VERIFY 0x20
#define CMS_NOVERIFY 0x20
#define CMS_DETACHED 0x40
#define CMS_BINARY 0x80
#define CMS_NOATTR 0x100
#define CMS_NOSMIMECAP 0x200
#define CMS_NOOLDMIMETYPE 0x400
#define CMS_CRLFEOL 0x800
#define CMS_STREAM 0x1000
#define CMS_NOCRL 0x2000
#define CMS_PARTIAL 0x4000
#define CMS_REUSE_DIGEST 0x8000
#define CMS_USE_KEYID 0x10000
#define CMS_DEBUG_DECRYPT 0x20000
#define CMS_KEY_PARAM 0x40000
#define CMS_ASCIICRLF 0x80000
#define CMS_CADES 0x100000
#define CMS_USE_ORIGINATOR_KEYID 0x200000
#define CMS_NO_SIGNING_TIME 0x400000
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);
ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms);
int CMS_is_detached(CMS_ContentInfo *cms);
int CMS_set_detached(CMS_ContentInfo *cms, int detached);
#ifdef OPENSSL_PEM_H
DECLARE_PEM_rw(CMS, CMS_ContentInfo)
#endif
int CMS_stream(unsigned char ***boundary, CMS_ContentInfo *cms);
CMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms);
int i2d_CMS_bio(BIO *bp, CMS_ContentInfo *cms);
BIO *BIO_new_CMS(BIO *out, CMS_ContentInfo *cms);
int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags);
int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *in,
int flags);
CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont);
CMS_ContentInfo *SMIME_read_CMS_ex(BIO *bio, int flags, BIO **bcont, CMS_ContentInfo **ci);
int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags);
int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont,
unsigned int flags);
int CMS_final_digest(CMS_ContentInfo *cms,
const unsigned char *md, unsigned int mdlen, BIO *dcont,
unsigned int flags);
CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey,
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);
CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si,
X509 *signcert, EVP_PKEY *pkey,
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);
CMS_ContentInfo *CMS_data_create_ex(BIO *in, unsigned int flags,
OSSL_LIB_CTX *libctx, const char *propq);
int CMS_digest_verify(CMS_ContentInfo *cms, BIO *dcont, BIO *out,
unsigned int flags);
CMS_ContentInfo *CMS_digest_create(BIO *in, const EVP_MD *md,
unsigned int flags);
CMS_ContentInfo *CMS_digest_create_ex(BIO *in, const EVP_MD *md,
unsigned int flags, OSSL_LIB_CTX *libctx,
const char *propq);
int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms,
const unsigned char *key, size_t keylen,
BIO *dcont, BIO *out, unsigned int flags);
CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher,
const unsigned char *key,
size_t keylen, unsigned int flags);
CMS_ContentInfo *CMS_EncryptedData_encrypt_ex(BIO *in, const EVP_CIPHER *cipher,
const unsigned char *key,
size_t keylen, unsigned int flags,
OSSL_LIB_CTX *libctx,
const char *propq);
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,
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);
STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms);
CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in,
const EVP_CIPHER *cipher, unsigned int flags);
CMS_ContentInfo *CMS_encrypt_ex(STACK_OF(X509) *certs, BIO *in,
const EVP_CIPHER *cipher, unsigned int flags,
OSSL_LIB_CTX *libctx, const char *propq);
int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert,
BIO *dcont, BIO *out, unsigned int flags);
int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert);
int CMS_decrypt_set1_pkey_and_peer(CMS_ContentInfo *cms, EVP_PKEY *pk,
X509 *cert, X509 *peer);
int CMS_decrypt_set1_key(CMS_ContentInfo *cms,
unsigned char *key, size_t keylen,
const unsigned char *id, size_t idlen);
int CMS_decrypt_set1_password(CMS_ContentInfo *cms,
unsigned char *pass, ossl_ssize_t passlen);
STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms);
int CMS_RecipientInfo_type(CMS_RecipientInfo *ri);
EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri);
CMS_ContentInfo *CMS_AuthEnvelopedData_create(const EVP_CIPHER *cipher);
CMS_ContentInfo *
CMS_AuthEnvelopedData_create_ex(const EVP_CIPHER *cipher, OSSL_LIB_CTX *libctx,
const char *propq);
CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher);
CMS_ContentInfo *CMS_EnvelopedData_create_ex(const EVP_CIPHER *cipher,
OSSL_LIB_CTX *libctx,
const char *propq);
BIO *CMS_EnvelopedData_decrypt(CMS_EnvelopedData *env, BIO *detached_data,
EVP_PKEY *pkey, X509 *cert,
ASN1_OCTET_STRING *secret, unsigned int flags,
OSSL_LIB_CTX *libctx, const char *propq);
CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms,
X509 *recip, unsigned int flags);
CMS_RecipientInfo *CMS_add1_recipient(CMS_ContentInfo *cms, X509 *recip,
EVP_PKEY *originatorPrivKey, X509 *originator, unsigned int flags);
int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey);
int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert);
int CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri,
EVP_PKEY **pk, X509 **recip,
X509_ALGOR **palg);
int CMS_RecipientInfo_ktri_get0_signer_id(CMS_RecipientInfo *ri,
ASN1_OCTET_STRING **keyid,
X509_NAME **issuer,
ASN1_INTEGER **sno);
CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid,
unsigned char *key, size_t keylen,
unsigned char *id, size_t idlen,
ASN1_GENERALIZEDTIME *date,
ASN1_OBJECT *otherTypeId,
ASN1_TYPE *otherType);
int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri,
X509_ALGOR **palg,
ASN1_OCTET_STRING **pid,
ASN1_GENERALIZEDTIME **pdate,
ASN1_OBJECT **potherid,
ASN1_TYPE **pothertype);
int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri,
unsigned char *key, size_t keylen);
int CMS_RecipientInfo_kekri_id_cmp(CMS_RecipientInfo *ri,
const unsigned char *id, size_t idlen);
int CMS_RecipientInfo_set0_password(CMS_RecipientInfo *ri,
unsigned char *pass,
ossl_ssize_t passlen);
CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms,
int iter, int wrap_nid,
int pbe_nid,
unsigned char *pass,
ossl_ssize_t passlen,
const EVP_CIPHER *kekciph);
int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri);
int CMS_RecipientInfo_encrypt(const CMS_ContentInfo *cms, CMS_RecipientInfo *ri);
int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out,
unsigned int flags);
CMS_ContentInfo *CMS_compress(BIO *in, int comp_nid, unsigned int flags);
int CMS_set1_eContentType(CMS_ContentInfo *cms, const ASN1_OBJECT *oid);
const ASN1_OBJECT *CMS_get0_eContentType(CMS_ContentInfo *cms);
CMS_CertificateChoices *CMS_add0_CertificateChoices(CMS_ContentInfo *cms);
int CMS_add0_cert(CMS_ContentInfo *cms, X509 *cert);
int CMS_add1_cert(CMS_ContentInfo *cms, X509 *cert);
STACK_OF(X509) *CMS_get1_certs(CMS_ContentInfo *cms);
CMS_RevocationInfoChoice *CMS_add0_RevocationInfoChoice(CMS_ContentInfo *cms);
int CMS_add0_crl(CMS_ContentInfo *cms, X509_CRL *crl);
int CMS_add1_crl(CMS_ContentInfo *cms, X509_CRL *crl);
STACK_OF(X509_CRL) *CMS_get1_crls(CMS_ContentInfo *cms);
int CMS_SignedData_init(CMS_ContentInfo *cms);
CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms,
X509 *signer, EVP_PKEY *pk, const EVP_MD *md,
unsigned int flags);
EVP_PKEY_CTX *CMS_SignerInfo_get0_pkey_ctx(CMS_SignerInfo *si);
EVP_MD_CTX *CMS_SignerInfo_get0_md_ctx(CMS_SignerInfo *si);
STACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms);
void CMS_SignerInfo_set1_signer_cert(CMS_SignerInfo *si, X509 *signer);
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,
unsigned int flags);
void CMS_SignerInfo_get0_algs(CMS_SignerInfo *si, EVP_PKEY **pk,
X509 **signer, X509_ALGOR **pdig,
X509_ALGOR **psig);
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);
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,
unsigned int flags,
OSSL_LIB_CTX *libctx, const char *propq);
int CMS_add_smimecap(CMS_SignerInfo *si, STACK_OF(X509_ALGOR) *algs);
int CMS_add_simple_smimecap(STACK_OF(X509_ALGOR) **algs,
int algnid, int keysize);
int CMS_add_standard_smimecap(STACK_OF(X509_ALGOR) **smcap);
int CMS_signed_get_attr_count(const CMS_SignerInfo *si);
int CMS_signed_get_attr_by_NID(const CMS_SignerInfo *si, int nid,
int lastpos);
int CMS_signed_get_attr_by_OBJ(const CMS_SignerInfo *si, const ASN1_OBJECT *obj,
int lastpos);
X509_ATTRIBUTE *CMS_signed_get_attr(const CMS_SignerInfo *si, int loc);
X509_ATTRIBUTE *CMS_signed_delete_attr(CMS_SignerInfo *si, int loc);
int CMS_signed_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr);
int CMS_signed_add1_attr_by_OBJ(CMS_SignerInfo *si,
const ASN1_OBJECT *obj, int type,
const void *bytes, int len);
int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si,
int nid, int type,
const void *bytes, int len);
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 ASN1_OBJECT *oid,
int lastpos, int type);
int CMS_unsigned_get_attr_count(const CMS_SignerInfo *si);
int CMS_unsigned_get_attr_by_NID(const CMS_SignerInfo *si, int nid,
int lastpos);
int CMS_unsigned_get_attr_by_OBJ(const CMS_SignerInfo *si,
const ASN1_OBJECT *obj, int lastpos);
X509_ATTRIBUTE *CMS_unsigned_get_attr(const CMS_SignerInfo *si, int loc);
X509_ATTRIBUTE *CMS_unsigned_delete_attr(CMS_SignerInfo *si, int loc);
int CMS_unsigned_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr);
int CMS_unsigned_add1_attr_by_OBJ(CMS_SignerInfo *si,
const ASN1_OBJECT *obj, int type,
const void *bytes, int len);
int CMS_unsigned_add1_attr_by_NID(CMS_SignerInfo *si,
int nid, int type,
const void *bytes, int len);
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,
int lastpos, int type);
int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr);
CMS_ReceiptRequest *CMS_ReceiptRequest_create0(
unsigned char *id, int idlen, int allorfirst,
STACK_OF(GENERAL_NAMES) *receiptList,
STACK_OF(GENERAL_NAMES) *receiptsTo);
CMS_ReceiptRequest *CMS_ReceiptRequest_create0_ex(
unsigned char *id, int idlen, int allorfirst,
STACK_OF(GENERAL_NAMES) *receiptList,
STACK_OF(GENERAL_NAMES) *receiptsTo,
OSSL_LIB_CTX *libctx);
int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr);
void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr,
ASN1_STRING **pcid,
int *pallorfirst,
STACK_OF(GENERAL_NAMES) **plist,
STACK_OF(GENERAL_NAMES) **prto);
int CMS_RecipientInfo_kari_get0_alg(CMS_RecipientInfo *ri,
X509_ALGOR **palg,
ASN1_OCTET_STRING **pukm);
STACK_OF(CMS_RecipientEncryptedKey)
*CMS_RecipientInfo_kari_get0_reks(CMS_RecipientInfo *ri);
int CMS_RecipientInfo_kari_get0_orig_id(CMS_RecipientInfo *ri,
X509_ALGOR **pubalg,
ASN1_BIT_STRING **pubkey,
ASN1_OCTET_STRING **keyid,
X509_NAME **issuer,
ASN1_INTEGER **sno);
int CMS_RecipientInfo_kari_orig_id_cmp(CMS_RecipientInfo *ri, X509 *cert);
int CMS_RecipientEncryptedKey_get0_id(CMS_RecipientEncryptedKey *rek,
ASN1_OCTET_STRING **keyid,
ASN1_GENERALIZEDTIME **tm,
CMS_OtherKeyAttribute **other,
X509_NAME **issuer, ASN1_INTEGER **sno);
int CMS_RecipientEncryptedKey_cert_cmp(CMS_RecipientEncryptedKey *rek,
X509 *cert);
int CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk);
int CMS_RecipientInfo_kari_set0_pkey_and_peer(CMS_RecipientInfo *ri, EVP_PKEY *pk, X509 *peer);
EVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri);
int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms,
CMS_RecipientInfo *ri,
CMS_RecipientEncryptedKey *rek);
int CMS_SharedInfo_encode(unsigned char **pder, X509_ALGOR *kekalg,
ASN1_OCTET_STRING *ukm, int keylen);
/* Backward compatibility for spelling errors. */
#define CMS_R_UNKNOWN_DIGEST_ALGORITM CMS_R_UNKNOWN_DIGEST_ALGORITHM
#define CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE \
CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE
#ifdef __cplusplus
}
#endif
#endif
#endif
@@ -0,0 +1,101 @@
/*
* Copyright 2015-2024 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
*/
/* clang-format off */
/* clang-format on */
#ifndef OPENSSL_COMP_H
#define OPENSSL_COMP_H
#pragma once
#include <openssl/macros.h>
#ifndef OPENSSL_NO_DEPRECATED_3_0
#define HEADER_COMP_H
#endif
#include <openssl/opensslconf.h>
#include <openssl/crypto.h>
#include <openssl/comperr.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifndef OPENSSL_NO_COMP
COMP_CTX *COMP_CTX_new(COMP_METHOD *meth);
const COMP_METHOD *COMP_CTX_get_method(const COMP_CTX *ctx);
int COMP_CTX_get_type(const COMP_CTX *comp);
int COMP_get_type(const COMP_METHOD *meth);
const char *COMP_get_name(const COMP_METHOD *meth);
void COMP_CTX_free(COMP_CTX *ctx);
int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen,
unsigned char *in, int ilen);
int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen,
unsigned char *in, int ilen);
COMP_METHOD *COMP_zlib(void);
COMP_METHOD *COMP_zlib_oneshot(void);
COMP_METHOD *COMP_brotli(void);
COMP_METHOD *COMP_brotli_oneshot(void);
COMP_METHOD *COMP_zstd(void);
COMP_METHOD *COMP_zstd_oneshot(void);
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
#define COMP_zlib_cleanup() \
while (0) \
continue
#endif
#ifdef OPENSSL_BIO_H
const BIO_METHOD *BIO_f_zlib(void);
const BIO_METHOD *BIO_f_brotli(void);
const BIO_METHOD *BIO_f_zstd(void);
#endif
#endif
typedef struct ssl_comp_st SSL_COMP;
/* clang-format off */
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_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))
#define sk_SSL_COMP_delete(sk, i) ((SSL_COMP *)OPENSSL_sk_delete(ossl_check_SSL_COMP_sk_type(sk), (i)))
#define sk_SSL_COMP_delete_ptr(sk, ptr) ((SSL_COMP *)OPENSSL_sk_delete_ptr(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)))
#define sk_SSL_COMP_push(sk, ptr) OPENSSL_sk_push(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr))
#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_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))
#define sk_SSL_COMP_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr))
#define sk_SSL_COMP_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr), pnum)
#define sk_SSL_COMP_sort(sk) OPENSSL_sk_sort(ossl_check_SSL_COMP_sk_type(sk))
#define sk_SSL_COMP_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SSL_COMP_sk_type(sk))
#define sk_SSL_COMP_dup(sk) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_dup(ossl_check_const_SSL_COMP_sk_type(sk)))
#define sk_SSL_COMP_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_deep_copy(ossl_check_const_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_copyfunc_type(copyfunc), ossl_check_SSL_COMP_freefunc_type(freefunc)))
#define sk_SSL_COMP_set_cmp_func(sk, cmp) ((sk_SSL_COMP_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_compfunc_type(cmp)))
/* clang-format on */
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,219 @@
/*
* WARNING: do not edit!
* Generated by Makefile from include/openssl/conf.h.in
*
* Copyright 1995-2021 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
*/
/* clang-format off */
/* clang-format on */
#ifndef OPENSSL_CONF_H
#define OPENSSL_CONF_H
#pragma once
#include <openssl/macros.h>
#ifndef OPENSSL_NO_DEPRECATED_3_0
#define HEADER_CONF_H
#endif
#include <openssl/bio.h>
#include <openssl/lhash.h>
#include <openssl/safestack.h>
#include <openssl/e_os2.h>
#include <openssl/types.h>
#include <openssl/conferr.h>
#ifndef OPENSSL_NO_STDIO
#include <stdio.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
char *section;
char *name;
char *value;
} CONF_VALUE;
/* clang-format off */
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_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))
#define sk_CONF_VALUE_delete(sk, i) ((CONF_VALUE *)OPENSSL_sk_delete(ossl_check_CONF_VALUE_sk_type(sk), (i)))
#define sk_CONF_VALUE_delete_ptr(sk, ptr) ((CONF_VALUE *)OPENSSL_sk_delete_ptr(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)))
#define sk_CONF_VALUE_push(sk, ptr) OPENSSL_sk_push(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr))
#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_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))
#define sk_CONF_VALUE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr))
#define sk_CONF_VALUE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr), pnum)
#define sk_CONF_VALUE_sort(sk) OPENSSL_sk_sort(ossl_check_CONF_VALUE_sk_type(sk))
#define sk_CONF_VALUE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CONF_VALUE_sk_type(sk))
#define sk_CONF_VALUE_dup(sk) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_dup(ossl_check_const_CONF_VALUE_sk_type(sk)))
#define sk_CONF_VALUE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_deep_copy(ossl_check_const_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_copyfunc_type(copyfunc), ossl_check_CONF_VALUE_freefunc_type(freefunc)))
#define sk_CONF_VALUE_set_cmp_func(sk, cmp) ((sk_CONF_VALUE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_compfunc_type(cmp)))
DEFINE_LHASH_OF_INTERNAL(CONF_VALUE);
#define lh_CONF_VALUE_new(hfn, cmp) ((LHASH_OF(CONF_VALUE) *)OPENSSL_LH_set_thunks(OPENSSL_LH_new(ossl_check_CONF_VALUE_lh_hashfunc_type(hfn), ossl_check_CONF_VALUE_lh_compfunc_type(cmp)), lh_CONF_VALUE_hash_thunk, lh_CONF_VALUE_comp_thunk, lh_CONF_VALUE_doall_thunk, lh_CONF_VALUE_doall_arg_thunk))
#define lh_CONF_VALUE_free(lh) OPENSSL_LH_free(ossl_check_CONF_VALUE_lh_type(lh))
#define lh_CONF_VALUE_flush(lh) OPENSSL_LH_flush(ossl_check_CONF_VALUE_lh_type(lh))
#define lh_CONF_VALUE_insert(lh, ptr) ((CONF_VALUE *)OPENSSL_LH_insert(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_CONF_VALUE_lh_plain_type(ptr)))
#define lh_CONF_VALUE_delete(lh, ptr) ((CONF_VALUE *)OPENSSL_LH_delete(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_const_CONF_VALUE_lh_plain_type(ptr)))
#define lh_CONF_VALUE_retrieve(lh, ptr) ((CONF_VALUE *)OPENSSL_LH_retrieve(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_const_CONF_VALUE_lh_plain_type(ptr)))
#define lh_CONF_VALUE_error(lh) OPENSSL_LH_error(ossl_check_CONF_VALUE_lh_type(lh))
#define lh_CONF_VALUE_num_items(lh) OPENSSL_LH_num_items(ossl_check_CONF_VALUE_lh_type(lh))
#define lh_CONF_VALUE_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_CONF_VALUE_lh_type(lh), out)
#define lh_CONF_VALUE_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_CONF_VALUE_lh_type(lh), out)
#define lh_CONF_VALUE_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_CONF_VALUE_lh_type(lh), out)
#define lh_CONF_VALUE_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_CONF_VALUE_lh_type(lh))
#define lh_CONF_VALUE_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_CONF_VALUE_lh_type(lh), dl)
#define lh_CONF_VALUE_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_CONF_VALUE_lh_doallfunc_type(dfn))
/* clang-format on */
struct conf_st;
struct conf_method_st;
typedef struct conf_method_st CONF_METHOD;
#ifndef OPENSSL_NO_DEPRECATED_3_0
#include <openssl/conftypes.h>
#endif
/* Module definitions */
typedef struct conf_imodule_st CONF_IMODULE;
typedef struct conf_module_st CONF_MODULE;
STACK_OF(CONF_MODULE);
STACK_OF(CONF_IMODULE);
/* DSO module function typedefs */
typedef int conf_init_func(CONF_IMODULE *md, const CONF *cnf);
typedef void conf_finish_func(CONF_IMODULE *md);
#define CONF_MFLAGS_IGNORE_ERRORS 0x1
#define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2
#define CONF_MFLAGS_SILENT 0x4
#define CONF_MFLAGS_NO_DSO 0x8
#define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10
#define CONF_MFLAGS_DEFAULT_SECTION 0x20
int CONF_set_default_method(CONF_METHOD *meth);
void CONF_set_nconf(CONF *conf, LHASH_OF(CONF_VALUE) *hash);
LHASH_OF(CONF_VALUE) *CONF_load(LHASH_OF(CONF_VALUE) *conf, const char *file,
long *eline);
#ifndef OPENSSL_NO_STDIO
LHASH_OF(CONF_VALUE) *CONF_load_fp(LHASH_OF(CONF_VALUE) *conf, FILE *fp,
long *eline);
#endif
LHASH_OF(CONF_VALUE) *CONF_load_bio(LHASH_OF(CONF_VALUE) *conf, BIO *bp,
long *eline);
STACK_OF(CONF_VALUE) *CONF_get_section(LHASH_OF(CONF_VALUE) *conf,
const char *section);
char *CONF_get_string(LHASH_OF(CONF_VALUE) *conf, const char *group,
const char *name);
long CONF_get_number(LHASH_OF(CONF_VALUE) *conf, const char *group,
const char *name);
void CONF_free(LHASH_OF(CONF_VALUE) *conf);
#ifndef OPENSSL_NO_STDIO
int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out);
#endif
int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out);
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
OSSL_DEPRECATEDIN_1_1_0 void OPENSSL_config(const char *config_name);
#endif
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
#define OPENSSL_no_config() \
OPENSSL_init_crypto(OPENSSL_INIT_NO_LOAD_CONFIG, NULL)
#endif
/*
* New conf code. The semantics are different from the functions above. If
* that wasn't the case, the above functions would have been replaced
*/
CONF *NCONF_new_ex(OSSL_LIB_CTX *libctx, CONF_METHOD *meth);
OSSL_LIB_CTX *NCONF_get0_libctx(const CONF *conf);
CONF *NCONF_new(CONF_METHOD *meth);
CONF_METHOD *NCONF_default(void);
#ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 CONF_METHOD *NCONF_WIN32(void);
#endif
void NCONF_free(CONF *conf);
void NCONF_free_data(CONF *conf);
int NCONF_load(CONF *conf, const char *file, long *eline);
#ifndef OPENSSL_NO_STDIO
int NCONF_load_fp(CONF *conf, FILE *fp, long *eline);
#endif
int NCONF_load_bio(CONF *conf, BIO *bp, long *eline);
STACK_OF(OPENSSL_CSTRING) *NCONF_get_section_names(const CONF *conf);
STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf,
const char *section);
char *NCONF_get_string(const CONF *conf, const char *group, const char *name);
int NCONF_get_number_e(const CONF *conf, const char *group, const char *name,
long *result);
#ifndef OPENSSL_NO_STDIO
int NCONF_dump_fp(const CONF *conf, FILE *out);
#endif
int NCONF_dump_bio(const CONF *conf, BIO *out);
#define NCONF_get_number(c, g, n, r) NCONF_get_number_e(c, g, n, r)
/* Module functions */
int CONF_modules_load(const CONF *cnf, const char *appname,
unsigned long flags);
int CONF_modules_load_file_ex(OSSL_LIB_CTX *libctx, const char *filename,
const char *appname, unsigned long flags);
int CONF_modules_load_file(const char *filename, const char *appname,
unsigned long flags);
void CONF_modules_unload(int all);
void CONF_modules_finish(void);
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
#define CONF_modules_free() \
while (0) \
continue
#endif
int CONF_module_add(const char *name, conf_init_func *ifunc,
conf_finish_func *ffunc);
const char *CONF_imodule_get_name(const CONF_IMODULE *md);
const char *CONF_imodule_get_value(const CONF_IMODULE *md);
void *CONF_imodule_get_usr_data(const CONF_IMODULE *md);
void CONF_imodule_set_usr_data(CONF_IMODULE *md, void *usr_data);
CONF_MODULE *CONF_imodule_get_module(const CONF_IMODULE *md);
unsigned long CONF_imodule_get_flags(const CONF_IMODULE *md);
void CONF_imodule_set_flags(CONF_IMODULE *md, unsigned long flags);
void *CONF_module_get_usr_data(CONF_MODULE *pmod);
void CONF_module_set_usr_data(CONF_MODULE *pmod, void *usr_data);
char *CONF_get1_default_config_file(void);
int CONF_parse_list(const char *list, int sep, int nospc,
int (*list_cb)(const char *elem, int len, void *usr),
void *arg);
void OPENSSL_load_builtin_modules(void);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,190 @@
/*
* WARNING: do not edit!
* Generated by configdata.pm from Configurations/common0.tmpl, Configurations/unix-Makefile.tmpl
* via Makefile.in
*
* Copyright 2016-2021 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_CONFIGURATION_H
#define OPENSSL_CONFIGURATION_H
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#ifdef OPENSSL_ALGORITHM_DEFINES
#error OPENSSL_ALGORITHM_DEFINES no longer supported
#endif
/*
* OpenSSL was configured with the following options:
*/
/* clang-format off */
# define OPENSSL_CONFIGURED_API 30500
# ifndef OPENSSL_RAND_SEED_OS
# define OPENSSL_RAND_SEED_OS
# endif
# ifndef OPENSSL_THREADS
# define OPENSSL_THREADS
# endif
# ifndef OPENSSL_NO_AFALGENG
# define OPENSSL_NO_AFALGENG
# endif
# ifndef OPENSSL_NO_ASAN
# define OPENSSL_NO_ASAN
# endif
# ifndef OPENSSL_NO_BROTLI_DYNAMIC
# define OPENSSL_NO_BROTLI_DYNAMIC
# endif
# 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_DEMOS
# define OPENSSL_NO_DEMOS
# endif
# ifndef OPENSSL_NO_DEVCRYPTOENG
# define OPENSSL_NO_DEVCRYPTOENG
# endif
# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
# define OPENSSL_NO_EC_NISTP_64_GCC_128
# endif
# ifndef OPENSSL_NO_EGD
# define OPENSSL_NO_EGD
# endif
# ifndef OPENSSL_NO_EXTERNAL_TESTS
# define OPENSSL_NO_EXTERNAL_TESTS
# endif
# ifndef OPENSSL_NO_FIPS_JITTER
# define OPENSSL_NO_FIPS_JITTER
# endif
# ifndef OPENSSL_NO_FUZZ_AFL
# define OPENSSL_NO_FUZZ_AFL
# endif
# ifndef OPENSSL_NO_FUZZ_LIBFUZZER
# define OPENSSL_NO_FUZZ_LIBFUZZER
# endif
# ifndef OPENSSL_NO_H3DEMO
# define OPENSSL_NO_H3DEMO
# endif
# ifndef OPENSSL_NO_HQINTEROP
# define OPENSSL_NO_HQINTEROP
# endif
# ifndef OPENSSL_NO_JITTER
# define OPENSSL_NO_JITTER
# endif
# ifndef OPENSSL_NO_KTLS
# define OPENSSL_NO_KTLS
# endif
# ifndef OPENSSL_NO_LOADERENG
# define OPENSSL_NO_LOADERENG
# endif
# ifndef OPENSSL_NO_MD2
# define OPENSSL_NO_MD2
# endif
# ifndef OPENSSL_NO_MSAN
# define OPENSSL_NO_MSAN
# endif
# ifndef OPENSSL_NO_PIE
# define OPENSSL_NO_PIE
# endif
# ifndef OPENSSL_NO_RC5
# define OPENSSL_NO_RC5
# endif
# ifndef OPENSSL_NO_SCTP
# define OPENSSL_NO_SCTP
# 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_TESTS
# define OPENSSL_NO_TESTS
# endif
# ifndef OPENSSL_NO_TFO
# define OPENSSL_NO_TFO
# endif
# ifndef OPENSSL_NO_TRACE
# define OPENSSL_NO_TRACE
# endif
# ifndef OPENSSL_NO_UBSAN
# define OPENSSL_NO_UBSAN
# endif
# ifndef OPENSSL_NO_UNIT_TEST
# define OPENSSL_NO_UNIT_TEST
# endif
# ifndef OPENSSL_NO_UPLINK
# define OPENSSL_NO_UPLINK
# endif
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
# define OPENSSL_NO_WEAK_SSL_CIPHERS
# endif
# ifndef OPENSSL_NO_WINSTORE
# define OPENSSL_NO_WINSTORE
# endif
# ifndef OPENSSL_NO_ZLIB_DYNAMIC
# define OPENSSL_NO_ZLIB_DYNAMIC
# endif
# 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 */
/* Generate 80386 code? */
/* clang-format off */
# undef I386_ONLY
/* clang-format on */
/*
* The following are cipher-specific, but are part of the public API.
*/
#if !defined(OPENSSL_SYS_UEFI)
/* clang-format off */
# undef BN_LLONG
/* clang-format on */
/* Only one for the following should be defined */
/* clang-format off */
# define SIXTY_FOUR_BIT_LONG
/* clang-format on */
/* clang-format off */
# undef SIXTY_FOUR_BIT
/* clang-format on */
/* clang-format off */
# undef THIRTY_TWO_BIT
/* clang-format on */
#endif
/* clang-format off */
# define RC4_INT unsigned char
/* clang-format on */
#if defined(OPENSSL_NO_COMP) || (defined(OPENSSL_NO_BROTLI) && defined(OPENSSL_NO_ZSTD) && defined(OPENSSL_NO_ZLIB))
#define OPENSSL_NO_COMP_ALG
#else
#undef OPENSSL_NO_COMP_ALG
#endif
#ifdef __cplusplus
}
#endif
#endif /* OPENSSL_CONFIGURATION_H */
@@ -0,0 +1,579 @@
/*
* WARNING: do not edit!
* Generated by Makefile from include/openssl/core_names.h.in
*
* Copyright 2019-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
*/
/* clang-format off */
/* clang-format on */
#ifndef OPENSSL_CORE_NAMES_H
#define OPENSSL_CORE_NAMES_H
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
/* OSSL_CIPHER_PARAM_CTS_MODE Values */
#define OSSL_CIPHER_CTS_MODE_CS1 "CS1"
#define OSSL_CIPHER_CTS_MODE_CS2 "CS2"
#define OSSL_CIPHER_CTS_MODE_CS3 "CS3"
/* Known CIPHER names (not a complete list) */
#define OSSL_CIPHER_NAME_AES_128_GCM_SIV "AES-128-GCM-SIV"
#define OSSL_CIPHER_NAME_AES_192_GCM_SIV "AES-192-GCM-SIV"
#define OSSL_CIPHER_NAME_AES_256_GCM_SIV "AES-256-GCM-SIV"
/* Known DIGEST names (not a complete list) */
#define OSSL_DIGEST_NAME_MD5 "MD5"
#define OSSL_DIGEST_NAME_MD5_SHA1 "MD5-SHA1"
#define OSSL_DIGEST_NAME_SHA1 "SHA1"
#define OSSL_DIGEST_NAME_SHA2_224 "SHA2-224"
#define OSSL_DIGEST_NAME_SHA2_256 "SHA2-256"
#define OSSL_DIGEST_NAME_SHA2_256_192 "SHA2-256/192"
#define OSSL_DIGEST_NAME_SHA2_384 "SHA2-384"
#define OSSL_DIGEST_NAME_SHA2_512 "SHA2-512"
#define OSSL_DIGEST_NAME_SHA2_512_224 "SHA2-512/224"
#define OSSL_DIGEST_NAME_SHA2_512_256 "SHA2-512/256"
#define OSSL_DIGEST_NAME_MD2 "MD2"
#define OSSL_DIGEST_NAME_MD4 "MD4"
#define OSSL_DIGEST_NAME_MDC2 "MDC2"
#define OSSL_DIGEST_NAME_RIPEMD160 "RIPEMD160"
#define OSSL_DIGEST_NAME_SHA3_224 "SHA3-224"
#define OSSL_DIGEST_NAME_SHA3_256 "SHA3-256"
#define OSSL_DIGEST_NAME_SHA3_384 "SHA3-384"
#define OSSL_DIGEST_NAME_SHA3_512 "SHA3-512"
#define OSSL_DIGEST_NAME_KECCAK_KMAC128 "KECCAK-KMAC-128"
#define OSSL_DIGEST_NAME_KECCAK_KMAC256 "KECCAK-KMAC-256"
#define OSSL_DIGEST_NAME_SM3 "SM3"
/* Known MAC names */
#define OSSL_MAC_NAME_BLAKE2BMAC "BLAKE2BMAC"
#define OSSL_MAC_NAME_BLAKE2SMAC "BLAKE2SMAC"
#define OSSL_MAC_NAME_CMAC "CMAC"
#define OSSL_MAC_NAME_GMAC "GMAC"
#define OSSL_MAC_NAME_HMAC "HMAC"
#define OSSL_MAC_NAME_KMAC128 "KMAC128"
#define OSSL_MAC_NAME_KMAC256 "KMAC256"
#define OSSL_MAC_NAME_POLY1305 "POLY1305"
#define OSSL_MAC_NAME_SIPHASH "SIPHASH"
/* Known KDF names */
#define OSSL_KDF_NAME_HKDF "HKDF"
#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_SSHKDF "SSHKDF"
#define OSSL_KDF_NAME_SSKDF "SSKDF"
#define OSSL_KDF_NAME_TLS1_PRF "TLS1-PRF"
#define OSSL_KDF_NAME_X942KDF_ASN1 "X942KDF-ASN1"
#define OSSL_KDF_NAME_X942KDF_CONCAT "X942KDF-CONCAT"
#define OSSL_KDF_NAME_X963KDF "X963KDF"
#define OSSL_KDF_NAME_KBKDF "KBKDF"
#define OSSL_KDF_NAME_KRB5KDF "KRB5KDF"
#define OSSL_KDF_NAME_HMACDRBGKDF "HMAC-DRBG-KDF"
/* RSA padding modes */
#define OSSL_PKEY_RSA_PAD_MODE_NONE "none"
#define OSSL_PKEY_RSA_PAD_MODE_PKCSV15 "pkcs1"
#define OSSL_PKEY_RSA_PAD_MODE_OAEP "oaep"
#define OSSL_PKEY_RSA_PAD_MODE_X931 "x931"
#define OSSL_PKEY_RSA_PAD_MODE_PSS "pss"
/* RSA pss padding salt length */
#define OSSL_PKEY_RSA_PSS_SALT_LEN_DIGEST "digest"
#define OSSL_PKEY_RSA_PSS_SALT_LEN_MAX "max"
#define OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO "auto"
#define OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO_DIGEST_MAX "auto-digestmax"
/* OSSL_PKEY_PARAM_EC_ENCODING values */
#define OSSL_PKEY_EC_ENCODING_EXPLICIT "explicit"
#define OSSL_PKEY_EC_ENCODING_GROUP "named_curve"
#define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_UNCOMPRESSED "uncompressed"
#define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_COMPRESSED "compressed"
#define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_HYBRID "hybrid"
#define OSSL_PKEY_EC_GROUP_CHECK_DEFAULT "default"
#define OSSL_PKEY_EC_GROUP_CHECK_NAMED "named"
#define OSSL_PKEY_EC_GROUP_CHECK_NAMED_NIST "named-nist"
/* PROV_SKEY well known key types */
#define OSSL_SKEY_TYPE_GENERIC "GENERIC-SECRET"
#define OSSL_SKEY_TYPE_AES "AES"
/* OSSL_KEM_PARAM_OPERATION values */
#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_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
# define OSSL_ASYM_CIPHER_PARAM_IMPLICIT_REJECTION "implicit-rejection"
# define OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST
# define OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST_PROPS OSSL_PKEY_PARAM_MGF1_PROPERTIES
# define OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST OSSL_ALG_PARAM_DIGEST
# define OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST_PROPS "digest-props"
# define OSSL_ASYM_CIPHER_PARAM_OAEP_LABEL "oaep-label"
# define OSSL_ASYM_CIPHER_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE
# define OSSL_ASYM_CIPHER_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES
# define OSSL_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION "tls-client-version"
# define OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION "tls-negotiated-version"
# define OSSL_CAPABILITY_TLS_GROUP_ALG "tls-group-alg"
# define OSSL_CAPABILITY_TLS_GROUP_ID "tls-group-id"
# define OSSL_CAPABILITY_TLS_GROUP_IS_KEM "tls-group-is-kem"
# define OSSL_CAPABILITY_TLS_GROUP_MAX_DTLS "tls-max-dtls"
# define OSSL_CAPABILITY_TLS_GROUP_MAX_TLS "tls-max-tls"
# define OSSL_CAPABILITY_TLS_GROUP_MIN_DTLS "tls-min-dtls"
# define OSSL_CAPABILITY_TLS_GROUP_MIN_TLS "tls-min-tls"
# define OSSL_CAPABILITY_TLS_GROUP_NAME "tls-group-name"
# define OSSL_CAPABILITY_TLS_GROUP_NAME_INTERNAL "tls-group-name-internal"
# define OSSL_CAPABILITY_TLS_GROUP_SECURITY_BITS "tls-group-sec-bits"
# define OSSL_CAPABILITY_TLS_SIGALG_CODE_POINT "tls-sigalg-code-point"
# define OSSL_CAPABILITY_TLS_SIGALG_HASH_NAME "tls-sigalg-hash-name"
# define OSSL_CAPABILITY_TLS_SIGALG_HASH_OID "tls-sigalg-hash-oid"
# define OSSL_CAPABILITY_TLS_SIGALG_IANA_NAME "tls-sigalg-iana-name"
# define OSSL_CAPABILITY_TLS_SIGALG_KEYTYPE "tls-sigalg-keytype"
# define OSSL_CAPABILITY_TLS_SIGALG_KEYTYPE_OID "tls-sigalg-keytype-oid"
# define OSSL_CAPABILITY_TLS_SIGALG_MAX_DTLS "tls-max-dtls"
# define OSSL_CAPABILITY_TLS_SIGALG_MAX_TLS "tls-max-tls"
# define OSSL_CAPABILITY_TLS_SIGALG_MIN_DTLS "tls-min-dtls"
# define OSSL_CAPABILITY_TLS_SIGALG_MIN_TLS "tls-min-tls"
# define OSSL_CAPABILITY_TLS_SIGALG_NAME "tls-sigalg-name"
# define OSSL_CAPABILITY_TLS_SIGALG_OID "tls-sigalg-oid"
# 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_PARAM_AEAD "aead"
# define OSSL_CIPHER_PARAM_AEAD_IVLEN OSSL_CIPHER_PARAM_IVLEN
# define OSSL_CIPHER_PARAM_AEAD_IV_GENERATED "iv-generated"
# define OSSL_CIPHER_PARAM_AEAD_MAC_KEY "mackey"
# define OSSL_CIPHER_PARAM_AEAD_TAG "tag"
# define OSSL_CIPHER_PARAM_AEAD_TAGLEN "taglen"
# define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD "tlsaad"
# define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD "tlsaadpad"
# define OSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN "tlsivgen"
# define OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED "tlsivfixed"
# define OSSL_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV "tlsivinv"
# define OSSL_CIPHER_PARAM_ALGORITHM_ID OSSL_ALG_PARAM_ALGORITHM_ID
# define OSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS OSSL_ALG_PARAM_ALGORITHM_ID_PARAMS
# define OSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS_OLD "alg_id_param"
# define OSSL_CIPHER_PARAM_BLOCK_SIZE "blocksize"
# define OSSL_CIPHER_PARAM_CTS "cts"
# 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_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"
# define OSSL_CIPHER_PARAM_IV "iv"
# define OSSL_CIPHER_PARAM_IVLEN "ivlen"
# define OSSL_CIPHER_PARAM_KEYLEN "keylen"
# define OSSL_CIPHER_PARAM_MODE "mode"
# define OSSL_CIPHER_PARAM_NUM "num"
# define OSSL_CIPHER_PARAM_PADDING "padding"
# define OSSL_CIPHER_PARAM_PIPELINE_AEAD_TAG "pipeline-tag"
# define OSSL_CIPHER_PARAM_RANDOM_KEY "randkey"
# define OSSL_CIPHER_PARAM_RC2_KEYBITS "keybits"
# define OSSL_CIPHER_PARAM_ROUNDS "rounds"
# define OSSL_CIPHER_PARAM_SPEED "speed"
# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK "tls-multi"
# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD "tls1multi_aad"
# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN "tls1multi_aadpacklen"
# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC "tls1multi_enc"
# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN "tls1multi_encin"
# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN "tls1multi_enclen"
# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE "tls1multi_interleave"
# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE "tls1multi_maxbufsz"
# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT "tls1multi_maxsndfrag"
# define OSSL_CIPHER_PARAM_TLS_MAC "tls-mac"
# define OSSL_CIPHER_PARAM_TLS_MAC_SIZE "tls-mac-size"
# define OSSL_CIPHER_PARAM_TLS_VERSION "tls-version"
# define OSSL_CIPHER_PARAM_UPDATED_IV "updated-iv"
# define OSSL_CIPHER_PARAM_USE_BITS "use-bits"
# define OSSL_CIPHER_PARAM_XTS_STANDARD "xts_standard"
# 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_MICALG "micalg"
# define OSSL_DIGEST_PARAM_PAD_TYPE "pad-type"
# define OSSL_DIGEST_PARAM_SIZE "size"
# define OSSL_DIGEST_PARAM_SSL3_MS "ssl3-ms"
# define OSSL_DIGEST_PARAM_XOF "xof"
# define OSSL_DIGEST_PARAM_XOFLEN "xoflen"
# define OSSL_DRBG_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER
# define OSSL_DRBG_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST
# define OSSL_DRBG_PARAM_ENTROPY_REQUIRED "entropy_required"
# define OSSL_DRBG_PARAM_FIPS_APPROVED_INDICATOR OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR
# define OSSL_DRBG_PARAM_FIPS_DIGEST_CHECK OSSL_PKEY_PARAM_FIPS_DIGEST_CHECK
# define OSSL_DRBG_PARAM_MAC OSSL_ALG_PARAM_MAC
# define OSSL_DRBG_PARAM_MAX_ADINLEN "max_adinlen"
# define OSSL_DRBG_PARAM_MAX_ENTROPYLEN "max_entropylen"
# define OSSL_DRBG_PARAM_MAX_LENGTH "maxium_length"
# define OSSL_DRBG_PARAM_MAX_NONCELEN "max_noncelen"
# define OSSL_DRBG_PARAM_MAX_PERSLEN "max_perslen"
# define OSSL_DRBG_PARAM_MIN_ENTROPYLEN "min_entropylen"
# define OSSL_DRBG_PARAM_MIN_LENGTH "minium_length"
# define OSSL_DRBG_PARAM_MIN_NONCELEN "min_noncelen"
# define OSSL_DRBG_PARAM_PREDICTION_RESISTANCE "prediction_resistance"
# define OSSL_DRBG_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES
# define OSSL_DRBG_PARAM_RANDOM_DATA "random_data"
# define OSSL_DRBG_PARAM_RESEED_COUNTER "reseed_counter"
# define OSSL_DRBG_PARAM_RESEED_REQUESTS "reseed_requests"
# define OSSL_DRBG_PARAM_RESEED_TIME "reseed_time"
# define OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL "reseed_time_interval"
# define OSSL_DRBG_PARAM_SIZE "size"
# define OSSL_DRBG_PARAM_USE_DF "use_derivation_function"
# define OSSL_ENCODER_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER
# define OSSL_ENCODER_PARAM_ENCRYPT_LEVEL "encrypt-level"
# define OSSL_ENCODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES
# define OSSL_ENCODER_PARAM_SAVE_PARAMETERS "save-parameters"
# define OSSL_EXCHANGE_PARAM_EC_ECDH_COFACTOR_MODE "ecdh-cofactor-mode"
# define OSSL_EXCHANGE_PARAM_FIPS_APPROVED_INDICATOR OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR
# define OSSL_EXCHANGE_PARAM_FIPS_DIGEST_CHECK OSSL_PKEY_PARAM_FIPS_DIGEST_CHECK
# define OSSL_EXCHANGE_PARAM_FIPS_ECDH_COFACTOR_CHECK OSSL_PROV_PARAM_ECDH_COFACTOR_CHECK
# define OSSL_EXCHANGE_PARAM_FIPS_KEY_CHECK OSSL_PKEY_PARAM_FIPS_KEY_CHECK
# define OSSL_EXCHANGE_PARAM_KDF_DIGEST "kdf-digest"
# define OSSL_EXCHANGE_PARAM_KDF_DIGEST_PROPS "kdf-digest-props"
# define OSSL_EXCHANGE_PARAM_KDF_OUTLEN "kdf-outlen"
# define OSSL_EXCHANGE_PARAM_KDF_TYPE "kdf-type"
# define OSSL_EXCHANGE_PARAM_KDF_UKM "kdf-ukm"
# define OSSL_EXCHANGE_PARAM_PAD "pad"
# define OSSL_GEN_PARAM_ITERATION "iteration"
# define OSSL_GEN_PARAM_POTENTIAL "potential"
# define OSSL_KDF_PARAM_ARGON2_AD "ad"
# define OSSL_KDF_PARAM_ARGON2_LANES "lanes"
# define OSSL_KDF_PARAM_ARGON2_MEMCOST "memcost"
# define OSSL_KDF_PARAM_ARGON2_VERSION "version"
# define OSSL_KDF_PARAM_CEK_ALG "cekalg"
# define OSSL_KDF_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER
# define OSSL_KDF_PARAM_CONSTANT "constant"
# define OSSL_KDF_PARAM_DATA "data"
# define OSSL_KDF_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST
# define OSSL_KDF_PARAM_EARLY_CLEAN "early_clean"
# define OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR
# define OSSL_KDF_PARAM_FIPS_DIGEST_CHECK OSSL_PKEY_PARAM_FIPS_DIGEST_CHECK
# define OSSL_KDF_PARAM_FIPS_EMS_CHECK "ems_check"
# define OSSL_KDF_PARAM_FIPS_KEY_CHECK OSSL_PKEY_PARAM_FIPS_KEY_CHECK
# define OSSL_KDF_PARAM_HMACDRBG_ENTROPY "entropy"
# define OSSL_KDF_PARAM_HMACDRBG_NONCE "nonce"
# define OSSL_KDF_PARAM_INFO "info"
# define OSSL_KDF_PARAM_ITER "iter"
# define OSSL_KDF_PARAM_KBKDF_R "r"
# define OSSL_KDF_PARAM_KBKDF_USE_L "use-l"
# define OSSL_KDF_PARAM_KBKDF_USE_SEPARATOR "use-separator"
# define OSSL_KDF_PARAM_KEY "key"
# define OSSL_KDF_PARAM_LABEL "label"
# define OSSL_KDF_PARAM_MAC OSSL_ALG_PARAM_MAC
# define OSSL_KDF_PARAM_MAC_SIZE "maclen"
# define OSSL_KDF_PARAM_MODE "mode"
# define OSSL_KDF_PARAM_PASSWORD "pass"
# define OSSL_KDF_PARAM_PKCS12_ID "id"
# define OSSL_KDF_PARAM_PKCS5 "pkcs5"
# define OSSL_KDF_PARAM_PREFIX "prefix"
# define OSSL_KDF_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES
# define OSSL_KDF_PARAM_SALT "salt"
# define OSSL_KDF_PARAM_SCRYPT_MAXMEM "maxmem_bytes"
# define OSSL_KDF_PARAM_SCRYPT_N "n"
# define OSSL_KDF_PARAM_SCRYPT_P "p"
# define OSSL_KDF_PARAM_SCRYPT_R "r"
# define OSSL_KDF_PARAM_SECRET "secret"
# define OSSL_KDF_PARAM_SEED "seed"
# define OSSL_KDF_PARAM_SIZE "size"
# define OSSL_KDF_PARAM_SSHKDF_SESSION_ID "session_id"
# define OSSL_KDF_PARAM_SSHKDF_TYPE "type"
# define OSSL_KDF_PARAM_SSHKDF_XCGHASH "xcghash"
# define OSSL_KDF_PARAM_THREADS "threads"
# define OSSL_KDF_PARAM_UKM "ukm"
# define OSSL_KDF_PARAM_X942_ACVPINFO "acvp-info"
# define OSSL_KDF_PARAM_X942_PARTYUINFO "partyu-info"
# define OSSL_KDF_PARAM_X942_PARTYVINFO "partyv-info"
# define OSSL_KDF_PARAM_X942_SUPP_PRIVINFO "supp-privinfo"
# define OSSL_KDF_PARAM_X942_SUPP_PUBINFO "supp-pubinfo"
# define OSSL_KDF_PARAM_X942_USE_KEYBITS "use-keybits"
# define OSSL_KEM_PARAM_FIPS_APPROVED_INDICATOR OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR
# define OSSL_KEM_PARAM_FIPS_KEY_CHECK OSSL_PKEY_PARAM_FIPS_KEY_CHECK
# define OSSL_KEM_PARAM_IKME "ikme"
# define OSSL_KEM_PARAM_OPERATION "operation"
# define OSSL_LIBSSL_RECORD_LAYER_PARAM_BLOCK_PADDING "block_padding"
# define OSSL_LIBSSL_RECORD_LAYER_PARAM_HS_PADDING "hs_padding"
# define OSSL_LIBSSL_RECORD_LAYER_PARAM_MAX_EARLY_DATA "max_early_data"
# define OSSL_LIBSSL_RECORD_LAYER_PARAM_MAX_FRAG_LEN "max_frag_len"
# define OSSL_LIBSSL_RECORD_LAYER_PARAM_MODE "mode"
# define OSSL_LIBSSL_RECORD_LAYER_PARAM_OPTIONS "options"
# define OSSL_LIBSSL_RECORD_LAYER_PARAM_READ_AHEAD "read_ahead"
# define OSSL_LIBSSL_RECORD_LAYER_PARAM_STREAM_MAC "stream_mac"
# define OSSL_LIBSSL_RECORD_LAYER_PARAM_TLSTREE "tlstree"
# define OSSL_LIBSSL_RECORD_LAYER_PARAM_USE_ETM "use_etm"
# define OSSL_LIBSSL_RECORD_LAYER_READ_BUFFER_LEN "read_buffer_len"
# define OSSL_MAC_PARAM_BLOCK_SIZE "block-size"
# define OSSL_MAC_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER
# define OSSL_MAC_PARAM_CUSTOM "custom"
# define OSSL_MAC_PARAM_C_ROUNDS "c-rounds"
# define OSSL_MAC_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST
# define OSSL_MAC_PARAM_DIGEST_NOINIT "digest-noinit"
# define OSSL_MAC_PARAM_DIGEST_ONESHOT "digest-oneshot"
# define OSSL_MAC_PARAM_D_ROUNDS "d-rounds"
# define OSSL_MAC_PARAM_FIPS_APPROVED_INDICATOR OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR
# define OSSL_MAC_PARAM_FIPS_KEY_CHECK OSSL_PKEY_PARAM_FIPS_KEY_CHECK
# define OSSL_MAC_PARAM_FIPS_NO_SHORT_MAC OSSL_PROV_PARAM_NO_SHORT_MAC
# define OSSL_MAC_PARAM_IV "iv"
# define OSSL_MAC_PARAM_KEY "key"
# define OSSL_MAC_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES
# define OSSL_MAC_PARAM_SALT "salt"
# define OSSL_MAC_PARAM_SIZE "size"
# define OSSL_MAC_PARAM_TLS_DATA_SIZE "tls-data-size"
# define OSSL_MAC_PARAM_XOF "xof"
# define OSSL_OBJECT_PARAM_DATA "data"
# define OSSL_OBJECT_PARAM_DATA_STRUCTURE "data-structure"
# define OSSL_OBJECT_PARAM_DATA_TYPE "data-type"
# define OSSL_OBJECT_PARAM_DESC "desc"
# define OSSL_OBJECT_PARAM_INPUT_TYPE "input-type"
# define OSSL_OBJECT_PARAM_REFERENCE "reference"
# define OSSL_OBJECT_PARAM_TYPE "type"
# define OSSL_PASSPHRASE_PARAM_INFO "info"
# define OSSL_PKEY_PARAM_ALGORITHM_ID OSSL_ALG_PARAM_ALGORITHM_ID
# 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_DEFAULT_DIGEST "default-digest"
# define OSSL_PKEY_PARAM_DHKEM_IKM "dhkem-ikm"
# define OSSL_PKEY_PARAM_DH_GENERATOR "safeprime-generator"
# define OSSL_PKEY_PARAM_DH_PRIV_LEN "priv_len"
# define OSSL_PKEY_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST
# define OSSL_PKEY_PARAM_DIGEST_SIZE "digest-size"
# define OSSL_PKEY_PARAM_DIST_ID "distid"
# define OSSL_PKEY_PARAM_EC_A "a"
# define OSSL_PKEY_PARAM_EC_B "b"
# define OSSL_PKEY_PARAM_EC_CHAR2_M "m"
# define OSSL_PKEY_PARAM_EC_CHAR2_PP_K1 "k1"
# define OSSL_PKEY_PARAM_EC_CHAR2_PP_K2 "k2"
# define OSSL_PKEY_PARAM_EC_CHAR2_PP_K3 "k3"
# define OSSL_PKEY_PARAM_EC_CHAR2_TP_BASIS "tp"
# define OSSL_PKEY_PARAM_EC_CHAR2_TYPE "basis-type"
# 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_TYPE "field-type"
# define OSSL_PKEY_PARAM_EC_GENERATOR "generator"
# define OSSL_PKEY_PARAM_EC_GROUP_CHECK_TYPE "group-check"
# define OSSL_PKEY_PARAM_EC_INCLUDE_PUBLIC "include-public"
# define OSSL_PKEY_PARAM_EC_ORDER "order"
# define OSSL_PKEY_PARAM_EC_P "p"
# define OSSL_PKEY_PARAM_EC_POINT_CONVERSION_FORMAT "point-format"
# define OSSL_PKEY_PARAM_EC_PUB_X "qx"
# 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
# define OSSL_PKEY_PARAM_FFC_G "g"
# define OSSL_PKEY_PARAM_FFC_GINDEX "gindex"
# define OSSL_PKEY_PARAM_FFC_H "hindex"
# define OSSL_PKEY_PARAM_FFC_P "p"
# define OSSL_PKEY_PARAM_FFC_PBITS "pbits"
# define OSSL_PKEY_PARAM_FFC_PCOUNTER "pcounter"
# define OSSL_PKEY_PARAM_FFC_Q "q"
# define OSSL_PKEY_PARAM_FFC_QBITS "qbits"
# define OSSL_PKEY_PARAM_FFC_SEED "seed"
# define OSSL_PKEY_PARAM_FFC_TYPE "type"
# define OSSL_PKEY_PARAM_FFC_VALIDATE_G "validate-g"
# define OSSL_PKEY_PARAM_FFC_VALIDATE_LEGACY "validate-legacy"
# define OSSL_PKEY_PARAM_FFC_VALIDATE_PQ "validate-pq"
# define OSSL_PKEY_PARAM_FIPS_APPROVED_INDICATOR OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR
# define OSSL_PKEY_PARAM_FIPS_DIGEST_CHECK "digest-check"
# define OSSL_PKEY_PARAM_FIPS_KEY_CHECK "key-check"
# define OSSL_PKEY_PARAM_FIPS_SIGN_CHECK "sign-check"
# define OSSL_PKEY_PARAM_GROUP_NAME "group"
# define OSSL_PKEY_PARAM_IMPLICIT_REJECTION "implicit-rejection"
# define OSSL_PKEY_PARAM_MANDATORY_DIGEST "mandatory-digest"
# define OSSL_PKEY_PARAM_MASKGENFUNC "mgf"
# define OSSL_PKEY_PARAM_MAX_SIZE "max-size"
# define OSSL_PKEY_PARAM_MGF1_DIGEST "mgf1-digest"
# define OSSL_PKEY_PARAM_MGF1_PROPERTIES "mgf1-properties"
# define OSSL_PKEY_PARAM_ML_DSA_INPUT_FORMATS "ml-dsa.input_formats"
# define OSSL_PKEY_PARAM_ML_DSA_OUTPUT_FORMATS "ml-dsa.output_formats"
# define OSSL_PKEY_PARAM_ML_DSA_PREFER_SEED "ml-dsa.prefer_seed"
# define OSSL_PKEY_PARAM_ML_DSA_RETAIN_SEED "ml-dsa.retain_seed"
# define OSSL_PKEY_PARAM_ML_DSA_SEED "seed"
# define OSSL_PKEY_PARAM_ML_KEM_IMPORT_PCT_TYPE "ml-kem.import_pct_type"
# define OSSL_PKEY_PARAM_ML_KEM_INPUT_FORMATS "ml-kem.input_formats"
# define OSSL_PKEY_PARAM_ML_KEM_OUTPUT_FORMATS "ml-kem.output_formats"
# 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_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_BITS OSSL_PKEY_PARAM_BITS
# define OSSL_PKEY_PARAM_RSA_COEFFICIENT "rsa-coefficient"
# define OSSL_PKEY_PARAM_RSA_COEFFICIENT1 "rsa-coefficient1"
# define OSSL_PKEY_PARAM_RSA_COEFFICIENT2 "rsa-coefficient2"
# define OSSL_PKEY_PARAM_RSA_COEFFICIENT3 "rsa-coefficient3"
# define OSSL_PKEY_PARAM_RSA_COEFFICIENT4 "rsa-coefficient4"
# define OSSL_PKEY_PARAM_RSA_COEFFICIENT5 "rsa-coefficient5"
# define OSSL_PKEY_PARAM_RSA_COEFFICIENT6 "rsa-coefficient6"
# define OSSL_PKEY_PARAM_RSA_COEFFICIENT7 "rsa-coefficient7"
# define OSSL_PKEY_PARAM_RSA_COEFFICIENT8 "rsa-coefficient8"
# define OSSL_PKEY_PARAM_RSA_COEFFICIENT9 "rsa-coefficient9"
# define OSSL_PKEY_PARAM_RSA_D "d"
# define OSSL_PKEY_PARAM_RSA_DERIVE_FROM_PQ "rsa-derive-from-pq"
# define OSSL_PKEY_PARAM_RSA_DIGEST OSSL_PKEY_PARAM_DIGEST
# define OSSL_PKEY_PARAM_RSA_DIGEST_PROPS OSSL_PKEY_PARAM_PROPERTIES
# define OSSL_PKEY_PARAM_RSA_E "e"
# define OSSL_PKEY_PARAM_RSA_EXPONENT "rsa-exponent"
# define OSSL_PKEY_PARAM_RSA_EXPONENT1 "rsa-exponent1"
# define OSSL_PKEY_PARAM_RSA_EXPONENT10 "rsa-exponent10"
# define OSSL_PKEY_PARAM_RSA_EXPONENT2 "rsa-exponent2"
# define OSSL_PKEY_PARAM_RSA_EXPONENT3 "rsa-exponent3"
# define OSSL_PKEY_PARAM_RSA_EXPONENT4 "rsa-exponent4"
# define OSSL_PKEY_PARAM_RSA_EXPONENT5 "rsa-exponent5"
# define OSSL_PKEY_PARAM_RSA_EXPONENT6 "rsa-exponent6"
# define OSSL_PKEY_PARAM_RSA_EXPONENT7 "rsa-exponent7"
# define OSSL_PKEY_PARAM_RSA_EXPONENT8 "rsa-exponent8"
# define OSSL_PKEY_PARAM_RSA_EXPONENT9 "rsa-exponent9"
# define OSSL_PKEY_PARAM_RSA_FACTOR "rsa-factor"
# define OSSL_PKEY_PARAM_RSA_FACTOR1 "rsa-factor1"
# define OSSL_PKEY_PARAM_RSA_FACTOR10 "rsa-factor10"
# define OSSL_PKEY_PARAM_RSA_FACTOR2 "rsa-factor2"
# define OSSL_PKEY_PARAM_RSA_FACTOR3 "rsa-factor3"
# define OSSL_PKEY_PARAM_RSA_FACTOR4 "rsa-factor4"
# define OSSL_PKEY_PARAM_RSA_FACTOR5 "rsa-factor5"
# define OSSL_PKEY_PARAM_RSA_FACTOR6 "rsa-factor6"
# define OSSL_PKEY_PARAM_RSA_FACTOR7 "rsa-factor7"
# define OSSL_PKEY_PARAM_RSA_FACTOR8 "rsa-factor8"
# define OSSL_PKEY_PARAM_RSA_FACTOR9 "rsa-factor9"
# define OSSL_PKEY_PARAM_RSA_MASKGENFUNC OSSL_PKEY_PARAM_MASKGENFUNC
# define OSSL_PKEY_PARAM_RSA_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST
# define OSSL_PKEY_PARAM_RSA_N "n"
# define OSSL_PKEY_PARAM_RSA_PRIMES "primes"
# define OSSL_PKEY_PARAM_RSA_PSS_SALTLEN "saltlen"
# define OSSL_PKEY_PARAM_RSA_TEST_P1 "p1"
# define OSSL_PKEY_PARAM_RSA_TEST_P2 "p2"
# define OSSL_PKEY_PARAM_RSA_TEST_Q1 "q1"
# define OSSL_PKEY_PARAM_RSA_TEST_Q2 "q2"
# define OSSL_PKEY_PARAM_RSA_TEST_XP "xp"
# define OSSL_PKEY_PARAM_RSA_TEST_XP1 "xp1"
# define OSSL_PKEY_PARAM_RSA_TEST_XP2 "xp2"
# define OSSL_PKEY_PARAM_RSA_TEST_XQ "xq"
# 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_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"
# define OSSL_PROV_PARAM_BUILDINFO "buildinfo"
# define OSSL_PROV_PARAM_CORE_MODULE_FILENAME "module-filename"
# define OSSL_PROV_PARAM_CORE_PROV_NAME "provider-name"
# define OSSL_PROV_PARAM_CORE_VERSION "openssl-version"
# define OSSL_PROV_PARAM_DRBG_TRUNC_DIGEST "drbg-no-trunc-md"
# define OSSL_PROV_PARAM_DSA_SIGN_DISABLED "dsa-sign-disabled"
# define OSSL_PROV_PARAM_ECDH_COFACTOR_CHECK "ecdh-cofactor-check"
# define OSSL_PROV_PARAM_HKDF_DIGEST_CHECK "hkdf-digest-check"
# define OSSL_PROV_PARAM_HKDF_KEY_CHECK "hkdf-key-check"
# define OSSL_PROV_PARAM_HMAC_KEY_CHECK "hmac-key-check"
# define OSSL_PROV_PARAM_KBKDF_KEY_CHECK "kbkdf-key-check"
# define OSSL_PROV_PARAM_KMAC_KEY_CHECK "kmac-key-check"
# define OSSL_PROV_PARAM_NAME "name"
# define OSSL_PROV_PARAM_NO_SHORT_MAC "no-short-mac"
# define OSSL_PROV_PARAM_PBKDF2_LOWER_BOUND_CHECK "pbkdf2-lower-bound-check"
# define OSSL_PROV_PARAM_RSA_PKCS15_PAD_DISABLED "rsa-pkcs15-pad-disabled"
# define OSSL_PROV_PARAM_RSA_PSS_SALTLEN_CHECK "rsa-pss-saltlen-check"
# define OSSL_PROV_PARAM_RSA_SIGN_X931_PAD_DISABLED "rsa-sign-x931-pad-disabled"
# define OSSL_PROV_PARAM_SECURITY_CHECKS "security-checks"
# define OSSL_PROV_PARAM_SELF_TEST_DESC "st-desc"
# define OSSL_PROV_PARAM_SELF_TEST_PHASE "st-phase"
# define OSSL_PROV_PARAM_SELF_TEST_TYPE "st-type"
# define OSSL_PROV_PARAM_SIGNATURE_DIGEST_CHECK "signature-digest-check"
# define OSSL_PROV_PARAM_SSHKDF_DIGEST_CHECK "sshkdf-digest-check"
# define OSSL_PROV_PARAM_SSHKDF_KEY_CHECK "sshkdf-key-check"
# define OSSL_PROV_PARAM_SSKDF_DIGEST_CHECK "sskdf-digest-check"
# define OSSL_PROV_PARAM_SSKDF_KEY_CHECK "sskdf-key-check"
# define OSSL_PROV_PARAM_STATUS "status"
# define OSSL_PROV_PARAM_TDES_ENCRYPT_DISABLED "tdes-encrypt-disabled"
# define OSSL_PROV_PARAM_TLS13_KDF_DIGEST_CHECK "tls13-kdf-digest-check"
# define OSSL_PROV_PARAM_TLS13_KDF_KEY_CHECK "tls13-kdf-key-check"
# define OSSL_PROV_PARAM_TLS1_PRF_DIGEST_CHECK "tls1-prf-digest-check"
# define OSSL_PROV_PARAM_TLS1_PRF_EMS_CHECK "tls1-prf-ems-check"
# define OSSL_PROV_PARAM_TLS1_PRF_KEY_CHECK "tls1-prf-key-check"
# define OSSL_PROV_PARAM_VERSION "version"
# define OSSL_PROV_PARAM_X942KDF_KEY_CHECK "x942kdf-key-check"
# define OSSL_PROV_PARAM_X963KDF_DIGEST_CHECK "x963kdf-digest-check"
# define OSSL_PROV_PARAM_X963KDF_KEY_CHECK "x963kdf-key-check"
# define OSSL_RAND_PARAM_FIPS_APPROVED_INDICATOR OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR
# define OSSL_RAND_PARAM_GENERATE "generate"
# define OSSL_RAND_PARAM_MAX_REQUEST "max_request"
# define OSSL_RAND_PARAM_STATE "state"
# define OSSL_RAND_PARAM_STRENGTH "strength"
# define OSSL_RAND_PARAM_TEST_ENTROPY "test_entropy"
# define OSSL_RAND_PARAM_TEST_NONCE "test_nonce"
# define OSSL_SIGNATURE_PARAM_ADD_RANDOM "additional-random"
# define OSSL_SIGNATURE_PARAM_ALGORITHM_ID OSSL_PKEY_PARAM_ALGORITHM_ID
# define OSSL_SIGNATURE_PARAM_ALGORITHM_ID_PARAMS OSSL_PKEY_PARAM_ALGORITHM_ID_PARAMS
# define OSSL_SIGNATURE_PARAM_CONTEXT_STRING "context-string"
# define OSSL_SIGNATURE_PARAM_DETERMINISTIC "deterministic"
# define OSSL_SIGNATURE_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST
# define OSSL_SIGNATURE_PARAM_DIGEST_SIZE OSSL_PKEY_PARAM_DIGEST_SIZE
# define OSSL_SIGNATURE_PARAM_FIPS_APPROVED_INDICATOR OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR
# define OSSL_SIGNATURE_PARAM_FIPS_DIGEST_CHECK OSSL_PKEY_PARAM_FIPS_DIGEST_CHECK
# define OSSL_SIGNATURE_PARAM_FIPS_KEY_CHECK OSSL_PKEY_PARAM_FIPS_KEY_CHECK
# define OSSL_SIGNATURE_PARAM_FIPS_RSA_PSS_SALTLEN_CHECK "rsa-pss-saltlen-check"
# define OSSL_SIGNATURE_PARAM_FIPS_SIGN_CHECK OSSL_PKEY_PARAM_FIPS_SIGN_CHECK
# define OSSL_SIGNATURE_PARAM_FIPS_SIGN_X931_PAD_CHECK "sign-x931-pad-check"
# define OSSL_SIGNATURE_PARAM_FIPS_VERIFY_MESSAGE "verify-message"
# define OSSL_SIGNATURE_PARAM_INSTANCE "instance"
# define OSSL_SIGNATURE_PARAM_KAT "kat"
# define OSSL_SIGNATURE_PARAM_MESSAGE_ENCODING "message-encoding"
# define OSSL_SIGNATURE_PARAM_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST
# define OSSL_SIGNATURE_PARAM_MGF1_PROPERTIES OSSL_PKEY_PARAM_MGF1_PROPERTIES
# define OSSL_SIGNATURE_PARAM_MU "mu"
# define OSSL_SIGNATURE_PARAM_NONCE_TYPE "nonce-type"
# define OSSL_SIGNATURE_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE
# define OSSL_SIGNATURE_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES
# define OSSL_SIGNATURE_PARAM_PSS_SALTLEN "saltlen"
# define OSSL_SIGNATURE_PARAM_SIGNATURE "signature"
# define OSSL_SIGNATURE_PARAM_TEST_ENTROPY "test-entropy"
# define OSSL_SKEY_PARAM_KEY_LENGTH "key-length"
# define OSSL_SKEY_PARAM_RAW_BYTES "raw-bytes"
# define OSSL_STORE_PARAM_ALIAS "alias"
# define OSSL_STORE_PARAM_DIGEST "digest"
# define OSSL_STORE_PARAM_EXPECT "expect"
# define OSSL_STORE_PARAM_FINGERPRINT "fingerprint"
# define OSSL_STORE_PARAM_INPUT_TYPE "input-type"
# define OSSL_STORE_PARAM_ISSUER "name"
# define OSSL_STORE_PARAM_PROPERTIES "properties"
# define OSSL_STORE_PARAM_SERIAL "serial"
# define OSSL_STORE_PARAM_SUBJECT "subject"
/* clang-format on */
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,279 @@
/*-
* WARNING: do not edit!
* Generated by Makefile from include/openssl/crmf.h.in
*
* Copyright 2007-2025 The OpenSSL Project Authors. All Rights Reserved.
* Copyright Nokia 2007-2019
* Copyright Siemens AG 2015-2019
*
* 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
*
* CRMF (RFC 4211) implementation by M. Peylo, M. Viljanen, and D. von Oheimb.
*/
/* clang-format off */
/* clang-format on */
#ifndef OPENSSL_CRMF_H
#define OPENSSL_CRMF_H
#include <openssl/opensslconf.h>
#ifndef OPENSSL_NO_CRMF
#include <openssl/opensslv.h>
#include <openssl/safestack.h>
#include <openssl/crmferr.h>
#include <openssl/x509v3.h> /* for GENERAL_NAME etc. */
#include <openssl/cms.h>
/* explicit #includes not strictly needed since implied by the above: */
#include <openssl/types.h>
#include <openssl/x509.h>
#ifdef __cplusplus
extern "C" {
#endif
#define OSSL_CRMF_POPOPRIVKEY_THISMESSAGE 0
#define OSSL_CRMF_POPOPRIVKEY_SUBSEQUENTMESSAGE 1
#define OSSL_CRMF_POPOPRIVKEY_DHMAC 2
#define OSSL_CRMF_POPOPRIVKEY_AGREEMAC 3
#define OSSL_CRMF_POPOPRIVKEY_ENCRYPTEDKEY 4
#define OSSL_CRMF_SUBSEQUENTMESSAGE_ENCRCERT 0
#define OSSL_CRMF_SUBSEQUENTMESSAGE_CHALLENGERESP 1
typedef struct ossl_crmf_encryptedvalue_st OSSL_CRMF_ENCRYPTEDVALUE;
DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_ENCRYPTEDVALUE)
typedef struct ossl_crmf_encryptedkey_st OSSL_CRMF_ENCRYPTEDKEY;
DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_ENCRYPTEDKEY)
typedef struct ossl_crmf_msg_st OSSL_CRMF_MSG;
DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_MSG)
DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_MSG)
/* clang-format off */
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_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))
#define sk_OSSL_CRMF_MSG_delete(sk, i) ((OSSL_CRMF_MSG *)OPENSSL_sk_delete(ossl_check_OSSL_CRMF_MSG_sk_type(sk), (i)))
#define sk_OSSL_CRMF_MSG_delete_ptr(sk, ptr) ((OSSL_CRMF_MSG *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)))
#define sk_OSSL_CRMF_MSG_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr))
#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_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))
#define sk_OSSL_CRMF_MSG_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr))
#define sk_OSSL_CRMF_MSG_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr), pnum)
#define sk_OSSL_CRMF_MSG_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CRMF_MSG_sk_type(sk))
#define sk_OSSL_CRMF_MSG_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk))
#define sk_OSSL_CRMF_MSG_dup(sk) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk)))
#define sk_OSSL_CRMF_MSG_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_copyfunc_type(copyfunc), ossl_check_OSSL_CRMF_MSG_freefunc_type(freefunc)))
#define sk_OSSL_CRMF_MSG_set_cmp_func(sk, cmp) ((sk_OSSL_CRMF_MSG_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_compfunc_type(cmp)))
/* clang-format on */
typedef struct ossl_crmf_attributetypeandvalue_st OSSL_CRMF_ATTRIBUTETYPEANDVALUE;
void OSSL_CRMF_ATTRIBUTETYPEANDVALUE_free(OSSL_CRMF_ATTRIBUTETYPEANDVALUE *v);
DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_ATTRIBUTETYPEANDVALUE)
/* clang-format off */
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_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))
#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_delete(sk, i) ((OSSL_CRMF_ATTRIBUTETYPEANDVALUE *)OPENSSL_sk_delete(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), (i)))
#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_delete_ptr(sk, ptr) ((OSSL_CRMF_ATTRIBUTETYPEANDVALUE *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_type(ptr)))
#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_type(ptr))
#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_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))
#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_type(ptr))
#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_type(ptr), pnum)
#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk))
#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk))
#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_dup(sk) ((STACK_OF(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk)))
#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_copyfunc_type(copyfunc), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_freefunc_type(freefunc)))
#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_set_cmp_func(sk, cmp) ((sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_compfunc_type(cmp)))
/* clang-format on */
typedef struct ossl_crmf_pbmparameter_st OSSL_CRMF_PBMPARAMETER;
DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_PBMPARAMETER)
typedef struct ossl_crmf_poposigningkey_st OSSL_CRMF_POPOSIGNINGKEY;
typedef struct ossl_crmf_certrequest_st OSSL_CRMF_CERTREQUEST;
typedef struct ossl_crmf_certid_st OSSL_CRMF_CERTID;
DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_CERTID)
DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_CERTID)
/* clang-format off */
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_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))
#define sk_OSSL_CRMF_CERTID_delete(sk, i) ((OSSL_CRMF_CERTID *)OPENSSL_sk_delete(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), (i)))
#define sk_OSSL_CRMF_CERTID_delete_ptr(sk, ptr) ((OSSL_CRMF_CERTID *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)))
#define sk_OSSL_CRMF_CERTID_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr))
#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_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))
#define sk_OSSL_CRMF_CERTID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr))
#define sk_OSSL_CRMF_CERTID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr), pnum)
#define sk_OSSL_CRMF_CERTID_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CRMF_CERTID_sk_type(sk))
#define sk_OSSL_CRMF_CERTID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk))
#define sk_OSSL_CRMF_CERTID_dup(sk) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk)))
#define sk_OSSL_CRMF_CERTID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_copyfunc_type(copyfunc), ossl_check_OSSL_CRMF_CERTID_freefunc_type(freefunc)))
#define sk_OSSL_CRMF_CERTID_set_cmp_func(sk, cmp) ((sk_OSSL_CRMF_CERTID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_compfunc_type(cmp)))
/* clang-format on */
typedef struct ossl_crmf_pkipublicationinfo_st OSSL_CRMF_PKIPUBLICATIONINFO;
DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_PKIPUBLICATIONINFO)
typedef struct ossl_crmf_singlepubinfo_st OSSL_CRMF_SINGLEPUBINFO;
DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_SINGLEPUBINFO)
typedef struct ossl_crmf_certtemplate_st OSSL_CRMF_CERTTEMPLATE;
DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_CERTTEMPLATE)
DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_CERTTEMPLATE)
typedef STACK_OF(OSSL_CRMF_MSG) OSSL_CRMF_MSGS;
DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_MSGS)
typedef struct ossl_crmf_optionalvalidity_st OSSL_CRMF_OPTIONALVALIDITY;
/* crmf_pbm.c */
OSSL_CRMF_PBMPARAMETER *OSSL_CRMF_pbmp_new(OSSL_LIB_CTX *libctx, size_t slen,
int owfnid, size_t itercnt,
int macnid);
int OSSL_CRMF_pbm_new(OSSL_LIB_CTX *libctx, const char *propq,
const OSSL_CRMF_PBMPARAMETER *pbmp,
const unsigned char *msg, size_t msglen,
const unsigned char *sec, size_t seclen,
unsigned char **mac, size_t *maclen);
/* crmf_lib.c */
int OSSL_CRMF_MSG_set1_regCtrl_regToken(OSSL_CRMF_MSG *msg,
const ASN1_UTF8STRING *tok);
ASN1_UTF8STRING
*OSSL_CRMF_MSG_get0_regCtrl_regToken(const OSSL_CRMF_MSG *msg);
int OSSL_CRMF_MSG_set1_regCtrl_authenticator(OSSL_CRMF_MSG *msg,
const ASN1_UTF8STRING *auth);
ASN1_UTF8STRING
*OSSL_CRMF_MSG_get0_regCtrl_authenticator(const OSSL_CRMF_MSG *msg);
int OSSL_CRMF_MSG_PKIPublicationInfo_push0_SinglePubInfo(OSSL_CRMF_PKIPUBLICATIONINFO *pi,
OSSL_CRMF_SINGLEPUBINFO *spi);
#define OSSL_CRMF_PUB_METHOD_DONTCARE 0
#define OSSL_CRMF_PUB_METHOD_X500 1
#define OSSL_CRMF_PUB_METHOD_WEB 2
#define OSSL_CRMF_PUB_METHOD_LDAP 3
int OSSL_CRMF_MSG_set0_SinglePubInfo(OSSL_CRMF_SINGLEPUBINFO *spi,
int method, GENERAL_NAME *nm);
#define OSSL_CRMF_PUB_ACTION_DONTPUBLISH 0
#define OSSL_CRMF_PUB_ACTION_PLEASEPUBLISH 1
int OSSL_CRMF_MSG_set_PKIPublicationInfo_action(OSSL_CRMF_PKIPUBLICATIONINFO *pi,
int action);
int OSSL_CRMF_MSG_set1_regCtrl_pkiPublicationInfo(OSSL_CRMF_MSG *msg,
const OSSL_CRMF_PKIPUBLICATIONINFO *pi);
OSSL_CRMF_PKIPUBLICATIONINFO
*OSSL_CRMF_MSG_get0_regCtrl_pkiPublicationInfo(const OSSL_CRMF_MSG *msg);
int OSSL_CRMF_MSG_set1_regCtrl_protocolEncrKey(OSSL_CRMF_MSG *msg,
const X509_PUBKEY *pubkey);
X509_PUBKEY
*OSSL_CRMF_MSG_get0_regCtrl_protocolEncrKey(const OSSL_CRMF_MSG *msg);
int OSSL_CRMF_MSG_set1_regCtrl_oldCertID(OSSL_CRMF_MSG *msg,
const OSSL_CRMF_CERTID *cid);
OSSL_CRMF_CERTID
*OSSL_CRMF_MSG_get0_regCtrl_oldCertID(const OSSL_CRMF_MSG *msg);
OSSL_CRMF_CERTID *OSSL_CRMF_CERTID_gen(const X509_NAME *issuer,
const ASN1_INTEGER *serial);
int OSSL_CRMF_MSG_set1_regInfo_utf8Pairs(OSSL_CRMF_MSG *msg,
const ASN1_UTF8STRING *utf8pairs);
ASN1_UTF8STRING
*OSSL_CRMF_MSG_get0_regInfo_utf8Pairs(const OSSL_CRMF_MSG *msg);
int OSSL_CRMF_MSG_set1_regInfo_certReq(OSSL_CRMF_MSG *msg,
const OSSL_CRMF_CERTREQUEST *cr);
OSSL_CRMF_CERTREQUEST
*OSSL_CRMF_MSG_get0_regInfo_certReq(const OSSL_CRMF_MSG *msg);
int OSSL_CRMF_MSG_set0_validity(OSSL_CRMF_MSG *crm,
ASN1_TIME *notBefore, ASN1_TIME *notAfter);
int OSSL_CRMF_MSG_set_certReqId(OSSL_CRMF_MSG *crm, int rid);
int OSSL_CRMF_MSG_get_certReqId(const OSSL_CRMF_MSG *crm);
int OSSL_CRMF_MSG_set0_extensions(OSSL_CRMF_MSG *crm, X509_EXTENSIONS *exts);
int OSSL_CRMF_MSG_push0_extension(OSSL_CRMF_MSG *crm, X509_EXTENSION *ext);
#define OSSL_CRMF_POPO_NONE -1
#define OSSL_CRMF_POPO_RAVERIFIED 0
#define OSSL_CRMF_POPO_SIGNATURE 1
#define OSSL_CRMF_POPO_KEYENC 2
#define OSSL_CRMF_POPO_KEYAGREE 3
int OSSL_CRMF_MSG_create_popo(int meth, OSSL_CRMF_MSG *crm,
EVP_PKEY *pkey, const EVP_MD *digest,
OSSL_LIB_CTX *libctx, const char *propq);
int OSSL_CRMF_MSGS_verify_popo(const OSSL_CRMF_MSGS *reqs,
int rid, int acceptRAVerified,
OSSL_LIB_CTX *libctx, const char *propq);
OSSL_CRMF_CERTTEMPLATE *OSSL_CRMF_MSG_get0_tmpl(const OSSL_CRMF_MSG *crm);
X509_PUBKEY
*OSSL_CRMF_CERTTEMPLATE_get0_publicKey(const OSSL_CRMF_CERTTEMPLATE *tmpl);
const X509_NAME *OSSL_CRMF_CERTTEMPLATE_get0_subject(const OSSL_CRMF_CERTTEMPLATE *tmpl);
const X509_NAME *OSSL_CRMF_CERTTEMPLATE_get0_issuer(const OSSL_CRMF_CERTTEMPLATE *tmpl);
const ASN1_INTEGER *OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(const OSSL_CRMF_CERTTEMPLATE *tmpl);
X509_EXTENSIONS
*OSSL_CRMF_CERTTEMPLATE_get0_extensions(const OSSL_CRMF_CERTTEMPLATE *tmpl);
const X509_NAME *OSSL_CRMF_CERTID_get0_issuer(const OSSL_CRMF_CERTID *cid);
const ASN1_INTEGER *OSSL_CRMF_CERTID_get0_serialNumber(const OSSL_CRMF_CERTID *cid);
int OSSL_CRMF_CERTTEMPLATE_fill(OSSL_CRMF_CERTTEMPLATE *tmpl,
EVP_PKEY *pubkey,
const X509_NAME *subject,
const X509_NAME *issuer,
const ASN1_INTEGER *serial);
X509 *OSSL_CRMF_ENCRYPTEDVALUE_get1_encCert(const OSSL_CRMF_ENCRYPTEDVALUE *ecert,
OSSL_LIB_CTX *libctx, const char *propq,
EVP_PKEY *pkey);
X509 *OSSL_CRMF_ENCRYPTEDKEY_get1_encCert(const OSSL_CRMF_ENCRYPTEDKEY *ecert,
OSSL_LIB_CTX *libctx, const char *propq,
EVP_PKEY *pkey, unsigned int flags);
unsigned char *OSSL_CRMF_ENCRYPTEDVALUE_decrypt(const OSSL_CRMF_ENCRYPTEDVALUE *enc,
OSSL_LIB_CTX *libctx, const char *propq,
EVP_PKEY *pkey, int *outlen);
EVP_PKEY *OSSL_CRMF_ENCRYPTEDKEY_get1_pkey(const OSSL_CRMF_ENCRYPTEDKEY *encryptedKey,
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);
#ifndef OPENSSL_NO_CMS
OSSL_CRMF_ENCRYPTEDKEY *OSSL_CRMF_ENCRYPTEDKEY_init_envdata(CMS_EnvelopedData *envdata);
#endif
#ifdef __cplusplus
}
#endif
#endif /* !defined(OPENSSL_NO_CRMF) */
#endif /* !defined(OPENSSL_CRMF_H) */
@@ -0,0 +1,588 @@
/*
* WARNING: do not edit!
* Generated by Makefile from include/openssl/crypto.h.in
*
* Copyright 1995-2025 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
* 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
*/
/* clang-format off */
/* clang-format on */
#ifndef OPENSSL_CRYPTO_H
#define OPENSSL_CRYPTO_H
#pragma once
#include <openssl/macros.h>
#ifndef OPENSSL_NO_DEPRECATED_3_0
#define HEADER_CRYPTO_H
#endif
#include <stdlib.h>
#include <time.h>
#include <openssl/e_os2.h>
#ifndef OPENSSL_NO_STDIO
#include <stdio.h>
#endif
#include <openssl/safestack.h>
#include <openssl/opensslv.h>
#include <openssl/types.h>
#include <openssl/opensslconf.h>
#include <openssl/cryptoerr.h>
#include <openssl/core.h>
#ifdef CHARSET_EBCDIC
#include <openssl/ebcdic.h>
#endif
/*
* Resolve problems on some operating systems with symbol names that clash
* one way or another
*/
#include <openssl/symhacks.h>
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
#include <openssl/opensslv.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
#define SSLeay OpenSSL_version_num
#define SSLeay_version OpenSSL_version
#define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER
#define SSLEAY_VERSION OPENSSL_VERSION
#define SSLEAY_CFLAGS OPENSSL_CFLAGS
#define SSLEAY_BUILT_ON OPENSSL_BUILT_ON
#define SSLEAY_PLATFORM OPENSSL_PLATFORM
#define SSLEAY_DIR OPENSSL_DIR
/*
* Old type for allocating dynamic locks. No longer used. Use the new thread
* API instead.
*/
typedef struct {
int dummy;
} CRYPTO_dynlock;
#endif /* OPENSSL_NO_DEPRECATED_1_1_0 */
typedef void CRYPTO_RWLOCK;
CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void);
__owur int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock);
__owur int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock);
int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock);
void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock);
int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock);
int CRYPTO_atomic_add64(uint64_t *val, uint64_t op, uint64_t *ret,
CRYPTO_RWLOCK *lock);
int CRYPTO_atomic_and(uint64_t *val, uint64_t op, uint64_t *ret,
CRYPTO_RWLOCK *lock);
int CRYPTO_atomic_or(uint64_t *val, uint64_t op, uint64_t *ret,
CRYPTO_RWLOCK *lock);
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);
/* No longer needed, so this is a no-op */
#define OPENSSL_malloc_init() \
while (0) \
continue
#define OPENSSL_malloc(num) \
CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
#define OPENSSL_zalloc(num) \
CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
#define OPENSSL_aligned_alloc(num, alignment, freeptr) \
CRYPTO_aligned_alloc(num, 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_clear_free(addr, num) \
CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
#define OPENSSL_free(addr) \
CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
#define OPENSSL_memdup(str, s) \
CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE)
#define OPENSSL_strdup(str) \
CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
#define OPENSSL_strndup(str, n) \
CRYPTO_strndup(str, n, OPENSSL_FILE, OPENSSL_LINE)
#define OPENSSL_secure_malloc(num) \
CRYPTO_secure_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
#define OPENSSL_secure_zalloc(num) \
CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
#define OPENSSL_secure_free(addr) \
CRYPTO_secure_free(addr, OPENSSL_FILE, OPENSSL_LINE)
#define OPENSSL_secure_clear_free(addr, num) \
CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
#define OPENSSL_secure_actual_size(ptr) \
CRYPTO_secure_actual_size(ptr)
size_t OPENSSL_strlcpy(char *dst, const char *src, size_t siz);
size_t OPENSSL_strlcat(char *dst, const char *src, size_t siz);
size_t OPENSSL_strnlen(const char *str, size_t maxlen);
int OPENSSL_strtoul(const char *str, char **endptr, int base, unsigned long *num);
int OPENSSL_buf2hexstr_ex(char *str, size_t str_n, size_t *strlength,
const unsigned char *buf, size_t buflen,
const char sep);
char *OPENSSL_buf2hexstr(const unsigned char *buf, long buflen);
int OPENSSL_hexstr2buf_ex(unsigned char *buf, size_t buf_n, size_t *buflen,
const char *str, const char sep);
unsigned char *OPENSSL_hexstr2buf(const char *str, long *buflen);
int OPENSSL_hexchar2int(unsigned char c);
int OPENSSL_strcasecmp(const char *s1, const char *s2);
int OPENSSL_strncasecmp(const char *s1, const char *s2, size_t n);
#define OPENSSL_MALLOC_MAX_NELEMS(type) (((1U << (sizeof(int) * 8 - 1)) - 1) / sizeof(type))
/*
* These functions return the values of OPENSSL_VERSION_MAJOR,
* OPENSSL_VERSION_MINOR, OPENSSL_VERSION_PATCH, OPENSSL_VERSION_PRE_RELEASE
* and OPENSSL_VERSION_BUILD_METADATA, respectively.
*/
unsigned int OPENSSL_version_major(void);
unsigned int OPENSSL_version_minor(void);
unsigned int OPENSSL_version_patch(void);
const char *OPENSSL_version_pre_release(void);
const char *OPENSSL_version_build_metadata(void);
unsigned long OpenSSL_version_num(void);
const char *OpenSSL_version(int type);
#define OPENSSL_VERSION 0
#define OPENSSL_CFLAGS 1
#define OPENSSL_BUILT_ON 2
#define OPENSSL_PLATFORM 3
#define OPENSSL_DIR 4
#define OPENSSL_ENGINES_DIR 5
#define OPENSSL_VERSION_STRING 6
#define OPENSSL_FULL_VERSION_STRING 7
#define OPENSSL_MODULES_DIR 8
#define OPENSSL_CPU_INFO 9
#define OPENSSL_WINCTX 10
const char *OPENSSL_info(int type);
/*
* The series starts at 1001 to avoid confusion with the OpenSSL_version
* types.
*/
#define OPENSSL_INFO_CONFIG_DIR 1001
#define OPENSSL_INFO_ENGINES_DIR 1002
#define OPENSSL_INFO_MODULES_DIR 1003
#define OPENSSL_INFO_DSO_EXTENSION 1004
#define OPENSSL_INFO_DIR_FILENAME_SEPARATOR 1005
#define OPENSSL_INFO_LIST_SEPARATOR 1006
#define OPENSSL_INFO_SEED_SOURCE 1007
#define OPENSSL_INFO_CPU_SETTINGS 1008
#define OPENSSL_INFO_WINDOWS_CONTEXT 1009
int OPENSSL_issetugid(void);
struct crypto_ex_data_st {
OSSL_LIB_CTX *ctx;
STACK_OF(void) *sk;
};
/* clang-format off */
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_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))
#define sk_void_delete(sk, i) ((void *)OPENSSL_sk_delete(ossl_check_void_sk_type(sk), (i)))
#define sk_void_delete_ptr(sk, ptr) ((void *)OPENSSL_sk_delete_ptr(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)))
#define sk_void_push(sk, ptr) OPENSSL_sk_push(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr))
#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_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))
#define sk_void_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr))
#define sk_void_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr), pnum)
#define sk_void_sort(sk) OPENSSL_sk_sort(ossl_check_void_sk_type(sk))
#define sk_void_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_void_sk_type(sk))
#define sk_void_dup(sk) ((STACK_OF(void) *)OPENSSL_sk_dup(ossl_check_const_void_sk_type(sk)))
#define sk_void_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(void) *)OPENSSL_sk_deep_copy(ossl_check_const_void_sk_type(sk), ossl_check_void_copyfunc_type(copyfunc), ossl_check_void_freefunc_type(freefunc)))
#define sk_void_set_cmp_func(sk, cmp) ((sk_void_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_void_sk_type(sk), ossl_check_void_compfunc_type(cmp)))
/* clang-format on */
/*
* Per class, we have a STACK of function pointers.
*/
#define CRYPTO_EX_INDEX_SSL 0
#define CRYPTO_EX_INDEX_SSL_CTX 1
#define CRYPTO_EX_INDEX_SSL_SESSION 2
#define CRYPTO_EX_INDEX_X509 3
#define CRYPTO_EX_INDEX_X509_STORE 4
#define CRYPTO_EX_INDEX_X509_STORE_CTX 5
#define CRYPTO_EX_INDEX_DH 6
#define CRYPTO_EX_INDEX_DSA 7
#define CRYPTO_EX_INDEX_EC_KEY 8
#define CRYPTO_EX_INDEX_RSA 9
#define CRYPTO_EX_INDEX_ENGINE 10
#define CRYPTO_EX_INDEX_UI 11
#define CRYPTO_EX_INDEX_BIO 12
#define CRYPTO_EX_INDEX_APP 13
#define CRYPTO_EX_INDEX_UI_METHOD 14
#define CRYPTO_EX_INDEX_RAND_DRBG 15
#define CRYPTO_EX_INDEX_DRBG CRYPTO_EX_INDEX_RAND_DRBG
#define CRYPTO_EX_INDEX_OSSL_LIB_CTX 16
#define CRYPTO_EX_INDEX_EVP_PKEY 17
#define CRYPTO_EX_INDEX__COUNT 18
typedef void CRYPTO_EX_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
int idx, long argl, void *argp);
typedef void CRYPTO_EX_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
int idx, long argl, void *argp);
typedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from,
void **from_d, int idx, long argl, void *argp);
__owur int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp,
CRYPTO_EX_new *new_func,
CRYPTO_EX_dup *dup_func,
CRYPTO_EX_free *free_func);
/* No longer use an index. */
int CRYPTO_free_ex_index(int class_index, int idx);
/*
* Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a
* given class (invokes whatever per-class callbacks are applicable)
*/
int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad);
int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to,
const CRYPTO_EX_DATA *from);
void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad);
/* Allocate a single item in the CRYPTO_EX_DATA variable */
int CRYPTO_alloc_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad,
int idx);
/*
* Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular
* index (relative to the class type involved)
*/
int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val);
void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx);
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
/*
* This function cleans up all "ex_data" state. It mustn't be called under
* potential race-conditions.
*/
#define CRYPTO_cleanup_all_ex_data() \
while (0) \
continue
/*
* The old locking functions have been removed completely without compatibility
* macros. This is because the old functions either could not properly report
* errors, or the returned error values were not clearly documented.
* Replacing the locking functions with no-ops would cause race condition
* issues in the affected applications. It is far better for them to fail at
* compile time.
* On the other hand, the locking callbacks are no longer used. Consequently,
* the callback management functions can be safely replaced with no-op macros.
*/
#define CRYPTO_num_locks() (1)
#define CRYPTO_set_locking_callback(func)
#define CRYPTO_get_locking_callback() (NULL)
#define CRYPTO_set_add_lock_callback(func)
#define CRYPTO_get_add_lock_callback() (NULL)
/*
* These defines where used in combination with the old locking callbacks,
* they are not called anymore, but old code that's not called might still
* use them.
*/
#define CRYPTO_LOCK 1
#define CRYPTO_UNLOCK 2
#define CRYPTO_READ 4
#define CRYPTO_WRITE 8
/* This structure is no longer used */
typedef struct crypto_threadid_st {
int dummy;
} CRYPTO_THREADID;
/* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */
#define CRYPTO_THREADID_set_numeric(id, val)
#define CRYPTO_THREADID_set_pointer(id, ptr)
#define CRYPTO_THREADID_set_callback(threadid_func) (0)
#define CRYPTO_THREADID_get_callback() (NULL)
#define CRYPTO_THREADID_current(id)
#define CRYPTO_THREADID_cmp(a, b) (-1)
#define CRYPTO_THREADID_cpy(dest, src)
#define CRYPTO_THREADID_hash(id) (0UL)
#ifndef OPENSSL_NO_DEPRECATED_1_0_0
#define CRYPTO_set_id_callback(func)
#define CRYPTO_get_id_callback() (NULL)
#define CRYPTO_thread_id() (0UL)
#endif /* OPENSSL_NO_DEPRECATED_1_0_0 */
#define CRYPTO_set_dynlock_create_callback(dyn_create_function)
#define CRYPTO_set_dynlock_lock_callback(dyn_lock_function)
#define CRYPTO_set_dynlock_destroy_callback(dyn_destroy_function)
#define CRYPTO_get_dynlock_create_callback() (NULL)
#define CRYPTO_get_dynlock_lock_callback() (NULL)
#define CRYPTO_get_dynlock_destroy_callback() (NULL)
#endif /* OPENSSL_NO_DEPRECATED_1_1_0 */
typedef void *(*CRYPTO_malloc_fn)(size_t num, const char *file, int line);
typedef void *(*CRYPTO_realloc_fn)(void *addr, size_t num, const char *file,
int line);
typedef void (*CRYPTO_free_fn)(void *addr, const char *file, int line);
int CRYPTO_set_mem_functions(CRYPTO_malloc_fn malloc_fn,
CRYPTO_realloc_fn realloc_fn,
CRYPTO_free_fn free_fn);
void CRYPTO_get_mem_functions(CRYPTO_malloc_fn *malloc_fn,
CRYPTO_realloc_fn *realloc_fn,
CRYPTO_free_fn *free_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_aligned_alloc(size_t num, 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);
void CRYPTO_free(void *ptr, const char *file, int line);
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);
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);
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);
int CRYPTO_secure_allocated(const void *ptr);
int CRYPTO_secure_malloc_initialized(void);
size_t CRYPTO_secure_actual_size(void *ptr);
size_t CRYPTO_secure_used(void);
void OPENSSL_cleanse(void *ptr, size_t len);
#ifndef OPENSSL_NO_CRYPTO_MDEBUG
/*
* The following can be used to detect memory leaks in the library. If
* used, it turns on malloc checking
*/
#define CRYPTO_MEM_CHECK_OFF 0x0 /* Control only */
#define CRYPTO_MEM_CHECK_ON 0x1 /* Control and mode bit */
#define CRYPTO_MEM_CHECK_ENABLE 0x2 /* Control and mode bit */
#define CRYPTO_MEM_CHECK_DISABLE 0x3 /* Control only */
/* max allowed length for value of OPENSSL_MALLOC_FAILURES env var. */
#define CRYPTO_MEM_CHECK_MAX_FS 256
void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount);
#ifndef OPENSSL_NO_DEPRECATED_3_0
#define OPENSSL_mem_debug_push(info) \
CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE)
#define OPENSSL_mem_debug_pop() \
CRYPTO_mem_debug_pop()
#endif
#ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 int CRYPTO_set_mem_debug(int flag);
OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_ctrl(int mode);
OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_push(const char *info,
const char *file, int line);
OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_pop(void);
OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_malloc(void *addr, size_t num,
int flag,
const char *file, int line);
OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_realloc(void *addr1, void *addr2,
size_t num, int flag,
const char *file, int line);
OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_free(void *addr, int flag,
const char *file, int line);
OSSL_DEPRECATEDIN_3_0
int CRYPTO_mem_leaks_cb(int (*cb)(const char *str, size_t len, void *u),
void *u);
#endif
#ifndef OPENSSL_NO_STDIO
#ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks_fp(FILE *);
#endif
#endif
#ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks(BIO *bio);
#endif
#endif /* OPENSSL_NO_CRYPTO_MDEBUG */
/* die if we have to */
ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line);
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
#define OpenSSLDie(f, l, a) OPENSSL_die((a), (f), (l))
#endif
#define OPENSSL_assert(e) \
(void)((e) ? 0 : (OPENSSL_die("assertion failed: " #e, OPENSSL_FILE, OPENSSL_LINE), 1))
int OPENSSL_isservice(void);
void OPENSSL_init(void);
#ifdef OPENSSL_SYS_UNIX
#ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_prepare(void);
OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_parent(void);
OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_child(void);
#endif
#endif
struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result);
int OPENSSL_gmtime_adj(struct tm *tm, int offset_day, long offset_sec);
int OPENSSL_gmtime_diff(int *pday, int *psec,
const struct tm *from, const struct tm *to);
/*
* CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal.
* It takes an amount of time dependent on |len|, but independent of the
* contents of |a| and |b|. Unlike memcmp, it cannot be used to put elements
* into a defined order as the return value when a != b is undefined, other
* than to be non-zero.
*/
int CRYPTO_memcmp(const void *in_a, const void *in_b, size_t len);
/* Standard initialisation options */
#define OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS 0x00000001L
#define OPENSSL_INIT_LOAD_CRYPTO_STRINGS 0x00000002L
#define OPENSSL_INIT_ADD_ALL_CIPHERS 0x00000004L
#define OPENSSL_INIT_ADD_ALL_DIGESTS 0x00000008L
#define OPENSSL_INIT_NO_ADD_ALL_CIPHERS 0x00000010L
#define OPENSSL_INIT_NO_ADD_ALL_DIGESTS 0x00000020L
#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 */
#define OPENSSL_INIT_NO_ATEXIT 0x00080000L
/* OPENSSL_INIT flag range 0x03f00000 reserved for OPENSSL_init_ssl() */
/* FREE: 0x04000000L */
/* FREE: 0x08000000L */
/* FREE: 0x10000000L */
/* FREE: 0x20000000L */
/* FREE: 0x40000000L */
/* 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)
/* 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);
/* Low-level control of initialization */
OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void);
#ifndef OPENSSL_NO_STDIO
int OPENSSL_INIT_set_config_filename(OPENSSL_INIT_SETTINGS *settings,
const char *config_filename);
void OPENSSL_INIT_set_config_file_flags(OPENSSL_INIT_SETTINGS *settings,
unsigned long flags);
int OPENSSL_INIT_set_config_appname(OPENSSL_INIT_SETTINGS *settings,
const char *config_appname);
#endif
void OPENSSL_INIT_free(OPENSSL_INIT_SETTINGS *settings);
#if defined(OPENSSL_THREADS) && !defined(CRYPTO_TDEBUG)
#if defined(_WIN32)
#if defined(BASETYPES) || defined(_WINDEF_H)
/* application has to include <windows.h> in order to use this */
typedef DWORD CRYPTO_THREAD_LOCAL;
typedef DWORD CRYPTO_THREAD_ID;
typedef LONG CRYPTO_ONCE;
#define CRYPTO_ONCE_STATIC_INIT 0
#endif
#else
#if defined(__TANDEM) && defined(_SPT_MODEL_)
#define SPT_THREAD_SIGNAL 1
#define SPT_THREAD_AWARE 1
#include <spthread.h>
#else
#include <pthread.h>
#endif
typedef pthread_once_t CRYPTO_ONCE;
typedef pthread_key_t CRYPTO_THREAD_LOCAL;
typedef pthread_t CRYPTO_THREAD_ID;
#define CRYPTO_ONCE_STATIC_INIT PTHREAD_ONCE_INIT
#endif
#endif
#if !defined(CRYPTO_ONCE_STATIC_INIT)
typedef unsigned int CRYPTO_ONCE;
typedef unsigned int CRYPTO_THREAD_LOCAL;
typedef unsigned int CRYPTO_THREAD_ID;
#define CRYPTO_ONCE_STATIC_INIT 0
#endif
int CRYPTO_THREAD_run_once(CRYPTO_ONCE *once, void (*init)(void));
int CRYPTO_THREAD_init_local(CRYPTO_THREAD_LOCAL *key, void (*cleanup)(void *));
void *CRYPTO_THREAD_get_local(CRYPTO_THREAD_LOCAL *key);
int CRYPTO_THREAD_set_local(CRYPTO_THREAD_LOCAL *key, void *val);
int CRYPTO_THREAD_cleanup_local(CRYPTO_THREAD_LOCAL *key);
CRYPTO_THREAD_ID CRYPTO_THREAD_get_current_id(void);
int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b);
OSSL_LIB_CTX *OSSL_LIB_CTX_new(void);
OSSL_LIB_CTX *OSSL_LIB_CTX_new_from_dispatch(const OSSL_CORE_HANDLE *handle,
const OSSL_DISPATCH *in);
OSSL_LIB_CTX *OSSL_LIB_CTX_new_child(const OSSL_CORE_HANDLE *handle,
const OSSL_DISPATCH *in);
int OSSL_LIB_CTX_load_config(OSSL_LIB_CTX *ctx, const char *config_file);
void OSSL_LIB_CTX_free(OSSL_LIB_CTX *);
OSSL_LIB_CTX *OSSL_LIB_CTX_get0_global_default(void);
OSSL_LIB_CTX *OSSL_LIB_CTX_set0_default(OSSL_LIB_CTX *libctx);
int OSSL_LIB_CTX_get_conf_diagnostics(OSSL_LIB_CTX *ctx);
void OSSL_LIB_CTX_set_conf_diagnostics(OSSL_LIB_CTX *ctx, int value);
void OSSL_sleep(uint64_t millis);
void *OSSL_LIB_CTX_get_data(OSSL_LIB_CTX *ctx, int index);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,574 @@
/*
* WARNING: do not edit!
* Generated by Makefile from include/openssl/ct.h.in
*
* Copyright 2016-2020 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
*/
/* clang-format off */
/* clang-format on */
#ifndef OPENSSL_CT_H
#define OPENSSL_CT_H
#pragma once
#include <openssl/macros.h>
#ifndef OPENSSL_NO_DEPRECATED_3_0
#define HEADER_CT_H
#endif
#include <openssl/opensslconf.h>
#ifndef OPENSSL_NO_CT
#include <openssl/types.h>
#include <openssl/safestack.h>
#include <openssl/x509.h>
#include <openssl/cterr.h>
#ifdef __cplusplus
extern "C" {
#endif
/* Minimum RSA key size, from RFC6962 */
#define SCT_MIN_RSA_BITS 2048
/* All hashes are SHA256 in v1 of Certificate Transparency */
#define CT_V1_HASHLEN SHA256_DIGEST_LENGTH
/* clang-format off */
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_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))
#define sk_SCT_delete(sk, i) ((SCT *)OPENSSL_sk_delete(ossl_check_SCT_sk_type(sk), (i)))
#define sk_SCT_delete_ptr(sk, ptr) ((SCT *)OPENSSL_sk_delete_ptr(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)))
#define sk_SCT_push(sk, ptr) OPENSSL_sk_push(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr))
#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_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))
#define sk_SCT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr))
#define sk_SCT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr), pnum)
#define sk_SCT_sort(sk) OPENSSL_sk_sort(ossl_check_SCT_sk_type(sk))
#define sk_SCT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SCT_sk_type(sk))
#define sk_SCT_dup(sk) ((STACK_OF(SCT) *)OPENSSL_sk_dup(ossl_check_const_SCT_sk_type(sk)))
#define sk_SCT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SCT) *)OPENSSL_sk_deep_copy(ossl_check_const_SCT_sk_type(sk), ossl_check_SCT_copyfunc_type(copyfunc), ossl_check_SCT_freefunc_type(freefunc)))
#define sk_SCT_set_cmp_func(sk, cmp) ((sk_SCT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SCT_sk_type(sk), ossl_check_SCT_compfunc_type(cmp)))
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_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))
#define sk_CTLOG_delete(sk, i) ((CTLOG *)OPENSSL_sk_delete(ossl_check_CTLOG_sk_type(sk), (i)))
#define sk_CTLOG_delete_ptr(sk, ptr) ((CTLOG *)OPENSSL_sk_delete_ptr(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)))
#define sk_CTLOG_push(sk, ptr) OPENSSL_sk_push(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr))
#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_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))
#define sk_CTLOG_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr))
#define sk_CTLOG_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr), pnum)
#define sk_CTLOG_sort(sk) OPENSSL_sk_sort(ossl_check_CTLOG_sk_type(sk))
#define sk_CTLOG_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CTLOG_sk_type(sk))
#define sk_CTLOG_dup(sk) ((STACK_OF(CTLOG) *)OPENSSL_sk_dup(ossl_check_const_CTLOG_sk_type(sk)))
#define sk_CTLOG_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CTLOG) *)OPENSSL_sk_deep_copy(ossl_check_const_CTLOG_sk_type(sk), ossl_check_CTLOG_copyfunc_type(copyfunc), ossl_check_CTLOG_freefunc_type(freefunc)))
#define sk_CTLOG_set_cmp_func(sk, cmp) ((sk_CTLOG_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_compfunc_type(cmp)))
/* clang-format on */
typedef enum {
CT_LOG_ENTRY_TYPE_NOT_SET = -1,
CT_LOG_ENTRY_TYPE_X509 = 0,
CT_LOG_ENTRY_TYPE_PRECERT = 1
} ct_log_entry_type_t;
typedef enum {
SCT_VERSION_NOT_SET = -1,
SCT_VERSION_V1 = 0
} sct_version_t;
typedef enum {
SCT_SOURCE_UNKNOWN,
SCT_SOURCE_TLS_EXTENSION,
SCT_SOURCE_X509V3_EXTENSION,
SCT_SOURCE_OCSP_STAPLED_RESPONSE
} sct_source_t;
typedef enum {
SCT_VALIDATION_STATUS_NOT_SET,
SCT_VALIDATION_STATUS_UNKNOWN_LOG,
SCT_VALIDATION_STATUS_VALID,
SCT_VALIDATION_STATUS_INVALID,
SCT_VALIDATION_STATUS_UNVERIFIED,
SCT_VALIDATION_STATUS_UNKNOWN_VERSION
} sct_validation_status_t;
/******************************************
* CT policy evaluation context functions *
******************************************/
/*
* Creates a new, empty policy evaluation context associated with the given
* library context and property query string.
* The caller is responsible for calling CT_POLICY_EVAL_CTX_free when finished
* with the CT_POLICY_EVAL_CTX.
*/
CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new_ex(OSSL_LIB_CTX *libctx,
const char *propq);
/*
* The same as CT_POLICY_EVAL_CTX_new_ex() but the default library
* context and property query string is used.
*/
CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new(void);
/* Deletes a policy evaluation context and anything it owns. */
void CT_POLICY_EVAL_CTX_free(CT_POLICY_EVAL_CTX *ctx);
/* Gets the peer certificate that the SCTs are for */
X509 *CT_POLICY_EVAL_CTX_get0_cert(const CT_POLICY_EVAL_CTX *ctx);
/*
* Sets the certificate associated with the received SCTs.
* Increments the reference count of cert.
* Returns 1 on success, 0 otherwise.
*/
int CT_POLICY_EVAL_CTX_set1_cert(CT_POLICY_EVAL_CTX *ctx, X509 *cert);
/* Gets the issuer of the aforementioned certificate */
X509 *CT_POLICY_EVAL_CTX_get0_issuer(const CT_POLICY_EVAL_CTX *ctx);
/*
* Sets the issuer of the certificate associated with the received SCTs.
* Increments the reference count of issuer.
* Returns 1 on success, 0 otherwise.
*/
int CT_POLICY_EVAL_CTX_set1_issuer(CT_POLICY_EVAL_CTX *ctx, X509 *issuer);
/* Gets the CT logs that are trusted sources of SCTs */
const CTLOG_STORE *CT_POLICY_EVAL_CTX_get0_log_store(const CT_POLICY_EVAL_CTX *ctx);
/* Sets the log store that is in use. It must outlive the CT_POLICY_EVAL_CTX. */
void CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(CT_POLICY_EVAL_CTX *ctx,
CTLOG_STORE *log_store);
/*
* Gets the time, in milliseconds since the Unix epoch, that will be used as the
* current time when checking whether an SCT was issued in the future.
* Such SCTs will fail validation, as required by RFC6962.
*/
uint64_t CT_POLICY_EVAL_CTX_get_time(const CT_POLICY_EVAL_CTX *ctx);
/*
* Sets the time to evaluate SCTs against, in milliseconds since the Unix epoch.
* If an SCT's timestamp is after this time, it will be interpreted as having
* been issued in the future. RFC6962 states that "TLS clients MUST reject SCTs
* whose timestamp is in the future", so an SCT will not validate in this case.
*/
void CT_POLICY_EVAL_CTX_set_time(CT_POLICY_EVAL_CTX *ctx, uint64_t time_in_ms);
/*****************
* SCT functions *
*****************/
/*
* Creates a new, blank SCT.
* The caller is responsible for calling SCT_free when finished with the SCT.
*/
SCT *SCT_new(void);
/*
* Creates a new SCT from some base64-encoded strings.
* The caller is responsible for calling SCT_free when finished with the SCT.
*/
SCT *SCT_new_from_base64(unsigned char version,
const char *logid_base64,
ct_log_entry_type_t entry_type,
uint64_t timestamp,
const char *extensions_base64,
const char *signature_base64);
/*
* Frees the SCT and the underlying data structures.
*/
void SCT_free(SCT *sct);
/*
* Free a stack of SCTs, and the underlying SCTs themselves.
* Intended to be compatible with X509V3_EXT_FREE.
*/
void SCT_LIST_free(STACK_OF(SCT) *a);
/*
* Returns the version of the SCT.
*/
sct_version_t SCT_get_version(const SCT *sct);
/*
* Set the version of an SCT.
* Returns 1 on success, 0 if the version is unrecognized.
*/
__owur int SCT_set_version(SCT *sct, sct_version_t version);
/*
* Returns the log entry type of the SCT.
*/
ct_log_entry_type_t SCT_get_log_entry_type(const SCT *sct);
/*
* Set the log entry type of an SCT.
* Returns 1 on success, 0 otherwise.
*/
__owur int SCT_set_log_entry_type(SCT *sct, ct_log_entry_type_t entry_type);
/*
* Gets the ID of the log that an SCT came from.
* Ownership of the log ID remains with the SCT.
* Returns the length of the log ID.
*/
size_t SCT_get0_log_id(const SCT *sct, unsigned char **log_id);
/*
* Set the log ID of an SCT to point directly to the *log_id specified.
* The SCT takes ownership of the specified pointer.
* Returns 1 on success, 0 otherwise.
*/
__owur int SCT_set0_log_id(SCT *sct, unsigned char *log_id, size_t log_id_len);
/*
* Set the log ID of an SCT.
* This makes a copy of the log_id.
* Returns 1 on success, 0 otherwise.
*/
__owur int SCT_set1_log_id(SCT *sct, const unsigned char *log_id,
size_t log_id_len);
/*
* Returns the timestamp for the SCT (epoch time in milliseconds).
*/
uint64_t SCT_get_timestamp(const SCT *sct);
/*
* Set the timestamp of an SCT (epoch time in milliseconds).
*/
void SCT_set_timestamp(SCT *sct, uint64_t timestamp);
/*
* Return the NID for the signature used by the SCT.
* For CT v1, this will be either NID_sha256WithRSAEncryption or
* NID_ecdsa_with_SHA256 (or NID_undef if incorrect/unset).
*/
int SCT_get_signature_nid(const SCT *sct);
/*
* Set the signature type of an SCT
* For CT v1, this should be either NID_sha256WithRSAEncryption or
* NID_ecdsa_with_SHA256.
* Returns 1 on success, 0 otherwise.
*/
__owur int SCT_set_signature_nid(SCT *sct, int nid);
/*
* Set *ext to point to the extension data for the SCT. ext must not be NULL.
* The SCT retains ownership of this pointer.
* Returns length of the data pointed to.
*/
size_t SCT_get0_extensions(const SCT *sct, unsigned char **ext);
/*
* Set the extensions of an SCT to point directly to the *ext specified.
* The SCT takes ownership of the specified pointer.
*/
void SCT_set0_extensions(SCT *sct, unsigned char *ext, size_t ext_len);
/*
* Set the extensions of an SCT.
* This takes a copy of the ext.
* Returns 1 on success, 0 otherwise.
*/
__owur int SCT_set1_extensions(SCT *sct, const unsigned char *ext,
size_t ext_len);
/*
* Set *sig to point to the signature for the SCT. sig must not be NULL.
* The SCT retains ownership of this pointer.
* Returns length of the data pointed to.
*/
size_t SCT_get0_signature(const SCT *sct, unsigned char **sig);
/*
* Set the signature of an SCT to point directly to the *sig specified.
* The SCT takes ownership of the specified pointer.
*/
void SCT_set0_signature(SCT *sct, unsigned char *sig, size_t sig_len);
/*
* Set the signature of an SCT to be a copy of the *sig specified.
* Returns 1 on success, 0 otherwise.
*/
__owur int SCT_set1_signature(SCT *sct, const unsigned char *sig,
size_t sig_len);
/*
* The origin of this SCT, e.g. TLS extension, OCSP response, etc.
*/
sct_source_t SCT_get_source(const SCT *sct);
/*
* Set the origin of this SCT, e.g. TLS extension, OCSP response, etc.
* Returns 1 on success, 0 otherwise.
*/
__owur int SCT_set_source(SCT *sct, sct_source_t source);
/*
* Returns a text string describing the validation status of |sct|.
*/
const char *SCT_validation_status_string(const SCT *sct);
/*
* Pretty-prints an |sct| to |out|.
* It will be indented by the number of spaces specified by |indent|.
* If |logs| is not NULL, it will be used to lookup the CT log that the SCT came
* from, so that the log name can be printed.
*/
void SCT_print(const SCT *sct, BIO *out, int indent, const CTLOG_STORE *logs);
/*
* Pretty-prints an |sct_list| to |out|.
* It will be indented by the number of spaces specified by |indent|.
* SCTs will be delimited by |separator|.
* If |logs| is not NULL, it will be used to lookup the CT log that each SCT
* came from, so that the log names can be printed.
*/
void SCT_LIST_print(const STACK_OF(SCT) *sct_list, BIO *out, int indent,
const char *separator, const CTLOG_STORE *logs);
/*
* Gets the last result of validating this SCT.
* If it has not been validated yet, returns SCT_VALIDATION_STATUS_NOT_SET.
*/
sct_validation_status_t SCT_get_validation_status(const SCT *sct);
/*
* Validates the given SCT with the provided context.
* Sets the "validation_status" field of the SCT.
* Returns 1 if the SCT is valid and the signature verifies.
* Returns 0 if the SCT is invalid or could not be verified.
* Returns -1 if an error occurs.
*/
__owur int SCT_validate(SCT *sct, const CT_POLICY_EVAL_CTX *ctx);
/*
* Validates the given list of SCTs with the provided context.
* Sets the "validation_status" field of each SCT.
* Returns 1 if there are no invalid SCTs and all signatures verify.
* Returns 0 if at least one SCT is invalid or could not be verified.
* Returns a negative integer if an error occurs.
*/
__owur int SCT_LIST_validate(const STACK_OF(SCT) *scts,
CT_POLICY_EVAL_CTX *ctx);
/*********************************
* SCT parsing and serialization *
*********************************/
/*
* Serialize (to TLS format) a stack of SCTs and return the length.
* "a" must not be NULL.
* If "pp" is NULL, just return the length of what would have been serialized.
* If "pp" is not NULL and "*pp" is null, function will allocate a new pointer
* for data that caller is responsible for freeing (only if function returns
* successfully).
* If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring
* that "*pp" is large enough to accept all of the serialized data.
* Returns < 0 on error, >= 0 indicating bytes written (or would have been)
* on success.
*/
__owur int i2o_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp);
/*
* Convert TLS format SCT list to a stack of SCTs.
* If "a" or "*a" is NULL, a new stack will be created that the caller is
* responsible for freeing (by calling SCT_LIST_free).
* "**pp" and "*pp" must not be NULL.
* Upon success, "*pp" will point to after the last bytes read, and a stack
* will be returned.
* Upon failure, a NULL pointer will be returned, and the position of "*pp" is
* not defined.
*/
STACK_OF(SCT) *o2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp,
size_t len);
/*
* Serialize (to DER format) a stack of SCTs and return the length.
* "a" must not be NULL.
* If "pp" is NULL, just returns the length of what would have been serialized.
* If "pp" is not NULL and "*pp" is null, function will allocate a new pointer
* for data that caller is responsible for freeing (only if function returns
* successfully).
* If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring
* that "*pp" is large enough to accept all of the serialized data.
* Returns < 0 on error, >= 0 indicating bytes written (or would have been)
* on success.
*/
__owur int i2d_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp);
/*
* Parses an SCT list in DER format and returns it.
* If "a" or "*a" is NULL, a new stack will be created that the caller is
* responsible for freeing (by calling SCT_LIST_free).
* "**pp" and "*pp" must not be NULL.
* Upon success, "*pp" will point to after the last bytes read, and a stack
* will be returned.
* Upon failure, a NULL pointer will be returned, and the position of "*pp" is
* not defined.
*/
STACK_OF(SCT) *d2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp,
long len);
/*
* Serialize (to TLS format) an |sct| and write it to |out|.
* If |out| is null, no SCT will be output but the length will still be returned.
* If |out| points to a null pointer, a string will be allocated to hold the
* TLS-format SCT. It is the responsibility of the caller to free it.
* If |out| points to an allocated string, the TLS-format SCT will be written
* to it.
* The length of the SCT in TLS format will be returned.
*/
__owur int i2o_SCT(const SCT *sct, unsigned char **out);
/*
* Parses an SCT in TLS format and returns it.
* If |psct| is not null, it will end up pointing to the parsed SCT. If it
* already points to a non-null pointer, the pointer will be free'd.
* |in| should be a pointer to a string containing the TLS-format SCT.
* |in| will be advanced to the end of the SCT if parsing succeeds.
* |len| should be the length of the SCT in |in|.
* Returns NULL if an error occurs.
* If the SCT is an unsupported version, only the SCT's 'sct' and 'sct_len'
* fields will be populated (with |in| and |len| respectively).
*/
SCT *o2i_SCT(SCT **psct, const unsigned char **in, size_t len);
/********************
* CT log functions *
********************/
/*
* Creates a new CT log instance with the given |public_key| and |name| and
* associates it with the give library context |libctx| and property query
* string |propq|.
* Takes ownership of |public_key| but copies |name|.
* Returns NULL if malloc fails or if |public_key| cannot be converted to DER.
* Should be deleted by the caller using CTLOG_free when no longer needed.
*/
CTLOG *CTLOG_new_ex(EVP_PKEY *public_key, const char *name, OSSL_LIB_CTX *libctx,
const char *propq);
/*
* The same as CTLOG_new_ex except that the default library context and
* property query string are used.
*/
CTLOG *CTLOG_new(EVP_PKEY *public_key, const char *name);
/*
* Creates a new CTLOG instance with the base64-encoded SubjectPublicKeyInfo DER
* in |pkey_base64| and associated with the given library context |libctx| and
* property query string |propq|. The |name| is a string to help users identify
* this log.
* Returns 1 on success, 0 on failure.
* Should be deleted by the caller using CTLOG_free when no longer needed.
*/
int CTLOG_new_from_base64_ex(CTLOG **ct_log, const char *pkey_base64,
const char *name, OSSL_LIB_CTX *libctx,
const char *propq);
/*
* The same as CTLOG_new_from_base64_ex() except that the default
* library context and property query string are used.
* Returns 1 on success, 0 on failure.
*/
int CTLOG_new_from_base64(CTLOG **ct_log,
const char *pkey_base64, const char *name);
/*
* Deletes a CT log instance and its fields.
*/
void CTLOG_free(CTLOG *log);
/* Gets the name of the CT log */
const char *CTLOG_get0_name(const CTLOG *log);
/* Gets the ID of the CT log */
void CTLOG_get0_log_id(const CTLOG *log, const uint8_t **log_id,
size_t *log_id_len);
/* Gets the public key of the CT log */
EVP_PKEY *CTLOG_get0_public_key(const CTLOG *log);
/**************************
* CT log store functions *
**************************/
/*
* Creates a new CT log store and associates it with the given libctx and
* property query string.
* Should be deleted by the caller using CTLOG_STORE_free when no longer needed.
*/
CTLOG_STORE *CTLOG_STORE_new_ex(OSSL_LIB_CTX *libctx, const char *propq);
/*
* Same as CTLOG_STORE_new_ex except that the default libctx and
* property query string are used.
* Should be deleted by the caller using CTLOG_STORE_free when no longer needed.
*/
CTLOG_STORE *CTLOG_STORE_new(void);
/*
* Deletes a CT log store and all of the CT log instances held within.
*/
void CTLOG_STORE_free(CTLOG_STORE *store);
/*
* Finds a CT log in the store based on its log ID.
* Returns the CT log, or NULL if no match is found.
*/
const CTLOG *CTLOG_STORE_get0_log_by_id(const CTLOG_STORE *store,
const uint8_t *log_id,
size_t log_id_len);
/*
* Loads a CT log list into a |store| from a |file|.
* Returns 1 if loading is successful, or 0 otherwise.
*/
__owur int CTLOG_STORE_load_file(CTLOG_STORE *store, const char *file);
/*
* Loads the default CT log list into a |store|.
* Returns 1 if loading is successful, or 0 otherwise.
*/
__owur int CTLOG_STORE_load_default_file(CTLOG_STORE *store);
#ifdef __cplusplus
}
#endif
#endif
#endif
@@ -0,0 +1,517 @@
/*
* Copyright 1995-2023 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
*/
/* clang-format off */
/* clang-format on */
#ifndef OPENSSL_ERR_H
#define OPENSSL_ERR_H
#pragma once
#include <openssl/macros.h>
#ifndef OPENSSL_NO_DEPRECATED_3_0
#define HEADER_ERR_H
#endif
#include <openssl/e_os2.h>
#ifndef OPENSSL_NO_STDIO
#include <stdio.h>
#include <stdlib.h>
#endif
#include <openssl/types.h>
#include <openssl/bio.h>
#include <openssl/lhash.h>
#include <openssl/cryptoerr_legacy.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifndef OPENSSL_NO_DEPRECATED_3_0
#ifndef OPENSSL_NO_FILENAMES
#define ERR_PUT_error(l, f, r, fn, ln) ERR_put_error(l, f, r, fn, ln)
#else
#define ERR_PUT_error(l, f, r, fn, ln) ERR_put_error(l, f, r, NULL, 0)
#endif
#endif
#include <limits.h>
#include <errno.h>
#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
#define ERR_LIB_BN 3
#define ERR_LIB_RSA 4
#define ERR_LIB_DH 5
#define ERR_LIB_EVP 6
#define ERR_LIB_BUF 7
#define ERR_LIB_OBJ 8
#define ERR_LIB_PEM 9
#define ERR_LIB_DSA 10
#define ERR_LIB_X509 11
/* #define ERR_LIB_METH 12 */
#define ERR_LIB_ASN1 13
#define ERR_LIB_CONF 14
#define ERR_LIB_CRYPTO 15
#define ERR_LIB_EC 16
#define ERR_LIB_SSL 20
/* #define ERR_LIB_SSL23 21 */
/* #define ERR_LIB_SSL2 22 */
/* #define ERR_LIB_SSL3 23 */
/* #define ERR_LIB_RSAREF 30 */
/* #define ERR_LIB_PROXY 31 */
#define ERR_LIB_BIO 32
#define ERR_LIB_PKCS7 33
#define ERR_LIB_X509V3 34
#define ERR_LIB_PKCS12 35
#define ERR_LIB_RAND 36
#define ERR_LIB_DSO 37
#define ERR_LIB_ENGINE 38
#define ERR_LIB_OCSP 39
#define ERR_LIB_UI 40
#define ERR_LIB_COMP 41
#define ERR_LIB_ECDSA 42
#define ERR_LIB_ECDH 43
#define ERR_LIB_OSSL_STORE 44
#define ERR_LIB_FIPS 45
#define ERR_LIB_CMS 46
#define ERR_LIB_TS 47
#define ERR_LIB_HMAC 48
/* # define ERR_LIB_JPAKE 49 */
#define ERR_LIB_CT 50
#define ERR_LIB_ASYNC 51
#define ERR_LIB_KDF 52
#define ERR_LIB_SM2 53
#define ERR_LIB_ESS 54
#define ERR_LIB_PROP 55
#define ERR_LIB_CRMF 56
#define ERR_LIB_PROV 57
#define ERR_LIB_CMP 58
#define ERR_LIB_OSSL_ENCODER 59
#define ERR_LIB_OSSL_DECODER 60
#define ERR_LIB_HTTP 61
#define ERR_LIB_USER 128
#ifndef OPENSSL_NO_DEPRECATED_3_0
#define ASN1err(f, r) ERR_raise_data(ERR_LIB_ASN1, (r), NULL)
#define ASYNCerr(f, r) ERR_raise_data(ERR_LIB_ASYNC, (r), NULL)
#define BIOerr(f, r) ERR_raise_data(ERR_LIB_BIO, (r), NULL)
#define BNerr(f, r) ERR_raise_data(ERR_LIB_BN, (r), NULL)
#define BUFerr(f, r) ERR_raise_data(ERR_LIB_BUF, (r), NULL)
#define CMPerr(f, r) ERR_raise_data(ERR_LIB_CMP, (r), NULL)
#define CMSerr(f, r) ERR_raise_data(ERR_LIB_CMS, (r), NULL)
#define COMPerr(f, r) ERR_raise_data(ERR_LIB_COMP, (r), NULL)
#define CONFerr(f, r) ERR_raise_data(ERR_LIB_CONF, (r), NULL)
#define CRMFerr(f, r) ERR_raise_data(ERR_LIB_CRMF, (r), NULL)
#define CRYPTOerr(f, r) ERR_raise_data(ERR_LIB_CRYPTO, (r), NULL)
#define CTerr(f, r) ERR_raise_data(ERR_LIB_CT, (r), NULL)
#define DHerr(f, r) ERR_raise_data(ERR_LIB_DH, (r), NULL)
#define DSAerr(f, r) ERR_raise_data(ERR_LIB_DSA, (r), NULL)
#define DSOerr(f, r) ERR_raise_data(ERR_LIB_DSO, (r), NULL)
#define ECDHerr(f, r) ERR_raise_data(ERR_LIB_ECDH, (r), NULL)
#define ECDSAerr(f, r) ERR_raise_data(ERR_LIB_ECDSA, (r), NULL)
#define ECerr(f, r) ERR_raise_data(ERR_LIB_EC, (r), NULL)
#define ENGINEerr(f, r) ERR_raise_data(ERR_LIB_ENGINE, (r), NULL)
#define ESSerr(f, r) ERR_raise_data(ERR_LIB_ESS, (r), NULL)
#define EVPerr(f, r) ERR_raise_data(ERR_LIB_EVP, (r), NULL)
#define FIPSerr(f, r) ERR_raise_data(ERR_LIB_FIPS, (r), NULL)
#define HMACerr(f, r) ERR_raise_data(ERR_LIB_HMAC, (r), NULL)
#define HTTPerr(f, r) ERR_raise_data(ERR_LIB_HTTP, (r), NULL)
#define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL)
#define OBJerr(f, r) ERR_raise_data(ERR_LIB_OBJ, (r), NULL)
#define OCSPerr(f, r) ERR_raise_data(ERR_LIB_OCSP, (r), NULL)
#define OSSL_STOREerr(f, r) ERR_raise_data(ERR_LIB_OSSL_STORE, (r), NULL)
#define PEMerr(f, r) ERR_raise_data(ERR_LIB_PEM, (r), NULL)
#define PKCS12err(f, r) ERR_raise_data(ERR_LIB_PKCS12, (r), NULL)
#define PKCS7err(f, r) ERR_raise_data(ERR_LIB_PKCS7, (r), NULL)
#define PROPerr(f, r) ERR_raise_data(ERR_LIB_PROP, (r), NULL)
#define PROVerr(f, r) ERR_raise_data(ERR_LIB_PROV, (r), NULL)
#define RANDerr(f, r) ERR_raise_data(ERR_LIB_RAND, (r), NULL)
#define RSAerr(f, r) ERR_raise_data(ERR_LIB_RSA, (r), NULL)
#define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL)
#define SM2err(f, r) ERR_raise_data(ERR_LIB_SM2, (r), NULL)
#define SSLerr(f, r) ERR_raise_data(ERR_LIB_SSL, (r), NULL)
#define SYSerr(f, r) ERR_raise_data(ERR_LIB_SYS, (r), NULL)
#define TSerr(f, r) ERR_raise_data(ERR_LIB_TS, (r), NULL)
#define UIerr(f, r) ERR_raise_data(ERR_LIB_UI, (r), NULL)
#define X509V3err(f, r) ERR_raise_data(ERR_LIB_X509V3, (r), NULL)
#define X509err(f, r) ERR_raise_data(ERR_LIB_X509, (r), NULL)
#endif
/*-
* The error code packs differently depending on if it records a system
* error or an OpenSSL error.
*
* A system error packs like this (we follow POSIX and only allow positive
* numbers that fit in an |int|):
*
* +-+-------------------------------------------------------------+
* |1| system error number |
* +-+-------------------------------------------------------------+
*
* An OpenSSL error packs like this:
*
* <---------------------------- 32 bits -------------------------->
* <--- 8 bits ---><------------------ 23 bits ----------------->
* +-+---------------+---------------------------------------------+
* |0| library | reason |
* +-+---------------+---------------------------------------------+
*
* A few of the reason bits are reserved as flags with special meaning:
*
* <5 bits-<>--------- 19 bits ----------------->
* +-------+-+-----------------------------------+
* | rflags| | reason |
* +-------+-+-----------------------------------+
* ^
* |
* ERR_RFLAG_FATAL = ERR_R_FATAL
*
* The reason flags are part of the overall reason code for practical
* reasons, as they provide an easy way to place different types of
* reason codes in different numeric ranges.
*
* The currently known reason flags are:
*
* ERR_RFLAG_FATAL Flags that the reason code is considered fatal.
* For backward compatibility reasons, this flag
* is also the code for ERR_R_FATAL (that reason
* code served the dual purpose of flag and reason
* code in one in pre-3.0 OpenSSL).
* ERR_RFLAG_COMMON Flags that the reason code is common to all
* libraries. All ERR_R_ macros must use this flag,
* and no other _R_ macro is allowed to use it.
*/
/* Macros to help decode recorded system errors */
#define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1)
#define ERR_SYSTEM_MASK ((unsigned int)INT_MAX)
/*
* Macros to help decode recorded OpenSSL errors
* As expressed above, RFLAGS and REASON overlap by one bit to allow
* ERR_R_FATAL to use ERR_RFLAG_FATAL as its reason code.
*/
#define ERR_LIB_OFFSET 23L
#define ERR_LIB_MASK 0xFF
#define ERR_RFLAGS_OFFSET 18L
#define ERR_RFLAGS_MASK 0x1F
#define ERR_REASON_MASK 0X7FFFFF
/*
* Reason flags are defined pre-shifted to easily combine with the reason
* number.
*/
#define ERR_RFLAG_FATAL (0x1 << ERR_RFLAGS_OFFSET)
#define ERR_RFLAG_COMMON (0x2 << ERR_RFLAGS_OFFSET)
#define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0)
static ossl_unused ossl_inline int ERR_GET_LIB(unsigned long errcode)
{
if (ERR_SYSTEM_ERROR(errcode))
return ERR_LIB_SYS;
return (errcode >> ERR_LIB_OFFSET) & ERR_LIB_MASK;
}
static ossl_unused ossl_inline int ERR_GET_RFLAGS(unsigned long errcode)
{
if (ERR_SYSTEM_ERROR(errcode))
return 0;
return errcode & (ERR_RFLAGS_MASK << ERR_RFLAGS_OFFSET);
}
static ossl_unused ossl_inline int ERR_GET_REASON(unsigned long errcode)
{
if (ERR_SYSTEM_ERROR(errcode))
return errcode & ERR_SYSTEM_MASK;
return errcode & ERR_REASON_MASK;
}
static ossl_unused ossl_inline int ERR_FATAL_ERROR(unsigned long errcode)
{
return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_FATAL) != 0;
}
static ossl_unused ossl_inline int ERR_COMMON_ERROR(unsigned long errcode)
{
return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_COMMON) != 0;
}
/*
* ERR_PACK is a helper macro to properly pack OpenSSL error codes and may
* only be used for that purpose. System errors are packed internally.
* ERR_PACK takes reason flags and reason code combined in |reason|.
* ERR_PACK ignores |func|, that parameter is just legacy from pre-3.0 OpenSSL.
*/
#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.
*/
/* "we came from here" global reason codes, range 1..255 */
#define ERR_R_SYS_LIB (ERR_LIB_SYS /* 2 */ | ERR_RFLAG_COMMON)
#define ERR_R_BN_LIB (ERR_LIB_BN /* 3 */ | ERR_RFLAG_COMMON)
#define ERR_R_RSA_LIB (ERR_LIB_RSA /* 4 */ | ERR_RFLAG_COMMON)
#define ERR_R_DH_LIB (ERR_LIB_DH /* 5 */ | ERR_RFLAG_COMMON)
#define ERR_R_EVP_LIB (ERR_LIB_EVP /* 6 */ | ERR_RFLAG_COMMON)
#define ERR_R_BUF_LIB (ERR_LIB_BUF /* 7 */ | ERR_RFLAG_COMMON)
#define ERR_R_OBJ_LIB (ERR_LIB_OBJ /* 8 */ | ERR_RFLAG_COMMON)
#define ERR_R_PEM_LIB (ERR_LIB_PEM /* 9 */ | ERR_RFLAG_COMMON)
#define ERR_R_DSA_LIB (ERR_LIB_DSA /* 10 */ | ERR_RFLAG_COMMON)
#define ERR_R_X509_LIB (ERR_LIB_X509 /* 11 */ | ERR_RFLAG_COMMON)
#define ERR_R_ASN1_LIB (ERR_LIB_ASN1 /* 13 */ | ERR_RFLAG_COMMON)
#define ERR_R_CONF_LIB (ERR_LIB_CONF /* 14 */ | ERR_RFLAG_COMMON)
#define ERR_R_CRYPTO_LIB (ERR_LIB_CRYPTO /* 15 */ | ERR_RFLAG_COMMON)
#define ERR_R_EC_LIB (ERR_LIB_EC /* 16 */ | ERR_RFLAG_COMMON)
#define ERR_R_SSL_LIB (ERR_LIB_SSL /* 20 */ | ERR_RFLAG_COMMON)
#define ERR_R_BIO_LIB (ERR_LIB_BIO /* 32 */ | ERR_RFLAG_COMMON)
#define ERR_R_PKCS7_LIB (ERR_LIB_PKCS7 /* 33 */ | ERR_RFLAG_COMMON)
#define ERR_R_X509V3_LIB (ERR_LIB_X509V3 /* 34 */ | ERR_RFLAG_COMMON)
#define ERR_R_PKCS12_LIB (ERR_LIB_PKCS12 /* 35 */ | ERR_RFLAG_COMMON)
#define ERR_R_RAND_LIB (ERR_LIB_RAND /* 36 */ | ERR_RFLAG_COMMON)
#define ERR_R_DSO_LIB (ERR_LIB_DSO /* 37 */ | ERR_RFLAG_COMMON)
#define ERR_R_ENGINE_LIB (ERR_LIB_ENGINE /* 38 */ | ERR_RFLAG_COMMON)
#define ERR_R_UI_LIB (ERR_LIB_UI /* 40 */ | ERR_RFLAG_COMMON)
#define ERR_R_ECDSA_LIB (ERR_LIB_ECDSA /* 42 */ | ERR_RFLAG_COMMON)
#define ERR_R_OSSL_STORE_LIB (ERR_LIB_OSSL_STORE /* 44 */ | ERR_RFLAG_COMMON)
#define ERR_R_CMS_LIB (ERR_LIB_CMS /* 46 */ | ERR_RFLAG_COMMON)
#define ERR_R_TS_LIB (ERR_LIB_TS /* 47 */ | ERR_RFLAG_COMMON)
#define ERR_R_CT_LIB (ERR_LIB_CT /* 50 */ | ERR_RFLAG_COMMON)
#define ERR_R_PROV_LIB (ERR_LIB_PROV /* 57 */ | ERR_RFLAG_COMMON)
#define ERR_R_ESS_LIB (ERR_LIB_ESS /* 54 */ | ERR_RFLAG_COMMON)
#define ERR_R_CMP_LIB (ERR_LIB_CMP /* 58 */ | ERR_RFLAG_COMMON)
#define ERR_R_OSSL_ENCODER_LIB (ERR_LIB_OSSL_ENCODER /* 59 */ | ERR_RFLAG_COMMON)
#define ERR_R_OSSL_DECODER_LIB (ERR_LIB_OSSL_DECODER /* 60 */ | ERR_RFLAG_COMMON)
/* Other common error codes, range 256..2^ERR_RFLAGS_OFFSET-1 */
#define ERR_R_FATAL (ERR_RFLAG_FATAL | ERR_RFLAG_COMMON)
#define ERR_R_MALLOC_FAILURE (256 | ERR_R_FATAL)
#define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (257 | ERR_R_FATAL)
#define ERR_R_PASSED_NULL_PARAMETER (258 | ERR_R_FATAL)
#define ERR_R_INTERNAL_ERROR (259 | ERR_R_FATAL)
#define ERR_R_DISABLED (260 | ERR_R_FATAL)
#define ERR_R_INIT_FAIL (261 | ERR_R_FATAL)
#define ERR_R_PASSED_INVALID_ARGUMENT (262 | ERR_RFLAG_COMMON)
#define ERR_R_OPERATION_FAIL (263 | ERR_R_FATAL)
#define ERR_R_INVALID_PROVIDER_FUNCTIONS (264 | ERR_R_FATAL)
#define ERR_R_INTERRUPTED_OR_CANCELLED (265 | ERR_RFLAG_COMMON)
#define ERR_R_NESTED_ASN1_ERROR (266 | ERR_RFLAG_COMMON)
#define ERR_R_MISSING_ASN1_EOS (267 | ERR_RFLAG_COMMON)
#define ERR_R_UNSUPPORTED (268 | ERR_RFLAG_COMMON)
#define ERR_R_FETCH_FAILED (269 | ERR_RFLAG_COMMON)
#define ERR_R_INVALID_PROPERTY_DEFINITION (270 | ERR_RFLAG_COMMON)
#define ERR_R_UNABLE_TO_GET_READ_LOCK (271 | ERR_R_FATAL)
#define ERR_R_UNABLE_TO_GET_WRITE_LOCK (272 | ERR_R_FATAL)
typedef struct ERR_string_data_st {
unsigned long error;
const char *string;
} ERR_STRING_DATA;
/* clang-format off */
DEFINE_LHASH_OF_INTERNAL(ERR_STRING_DATA);
#define lh_ERR_STRING_DATA_new(hfn, cmp) ((LHASH_OF(ERR_STRING_DATA) *)OPENSSL_LH_set_thunks(OPENSSL_LH_new(ossl_check_ERR_STRING_DATA_lh_hashfunc_type(hfn), ossl_check_ERR_STRING_DATA_lh_compfunc_type(cmp)), lh_ERR_STRING_DATA_hash_thunk, lh_ERR_STRING_DATA_comp_thunk, lh_ERR_STRING_DATA_doall_thunk, lh_ERR_STRING_DATA_doall_arg_thunk))
#define lh_ERR_STRING_DATA_free(lh) OPENSSL_LH_free(ossl_check_ERR_STRING_DATA_lh_type(lh))
#define lh_ERR_STRING_DATA_flush(lh) OPENSSL_LH_flush(ossl_check_ERR_STRING_DATA_lh_type(lh))
#define lh_ERR_STRING_DATA_insert(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_insert(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_ERR_STRING_DATA_lh_plain_type(ptr)))
#define lh_ERR_STRING_DATA_delete(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_delete(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_const_ERR_STRING_DATA_lh_plain_type(ptr)))
#define lh_ERR_STRING_DATA_retrieve(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_retrieve(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_const_ERR_STRING_DATA_lh_plain_type(ptr)))
#define lh_ERR_STRING_DATA_error(lh) OPENSSL_LH_error(ossl_check_ERR_STRING_DATA_lh_type(lh))
#define lh_ERR_STRING_DATA_num_items(lh) OPENSSL_LH_num_items(ossl_check_ERR_STRING_DATA_lh_type(lh))
#define lh_ERR_STRING_DATA_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_ERR_STRING_DATA_lh_type(lh), out)
#define lh_ERR_STRING_DATA_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_ERR_STRING_DATA_lh_type(lh), out)
#define lh_ERR_STRING_DATA_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_ERR_STRING_DATA_lh_type(lh), out)
#define lh_ERR_STRING_DATA_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_ERR_STRING_DATA_lh_type(lh))
#define lh_ERR_STRING_DATA_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_ERR_STRING_DATA_lh_type(lh), dl)
#define lh_ERR_STRING_DATA_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_ERR_STRING_DATA_lh_doallfunc_type(dfn))
/* clang-format on */
/* 12 lines and some on an 80 column terminal */
#define ERR_MAX_DATA_SIZE 1024
/* Building blocks */
void ERR_new(void);
void ERR_set_debug(const char *file, int line, const char *func);
void ERR_set_error(int lib, int reason, const char *fmt, ...);
void ERR_vset_error(int lib, int reason, const char *fmt, va_list args);
/* Main error raising functions */
#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
#define ERR_raise_data \
(ERR_new(), \
ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
ERR_set_error)
#ifndef OPENSSL_NO_DEPRECATED_3_0
/* Backward compatibility */
#define ERR_put_error(lib, func, reason, file, line) \
(ERR_new(), \
ERR_set_debug((file), (line), OPENSSL_FUNC), \
ERR_set_error((lib), (reason), NULL))
#endif
void ERR_set_error_data(char *data, int flags);
unsigned long ERR_get_error(void);
unsigned long ERR_get_error_all(const char **file, int *line,
const char **func,
const char **data, int *flags);
#ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0
unsigned long ERR_get_error_line(const char **file, int *line);
OSSL_DEPRECATEDIN_3_0
unsigned long ERR_get_error_line_data(const char **file, int *line,
const char **data, int *flags);
#endif
unsigned long ERR_peek_error(void);
unsigned long ERR_peek_error_line(const char **file, int *line);
unsigned long ERR_peek_error_func(const char **func);
unsigned long ERR_peek_error_data(const char **data, int *flags);
unsigned long ERR_peek_error_all(const char **file, int *line,
const char **func,
const char **data, int *flags);
#ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0
unsigned long ERR_peek_error_line_data(const char **file, int *line,
const char **data, int *flags);
#endif
unsigned long ERR_peek_last_error(void);
unsigned long ERR_peek_last_error_line(const char **file, int *line);
unsigned long ERR_peek_last_error_func(const char **func);
unsigned long ERR_peek_last_error_data(const char **data, int *flags);
unsigned long ERR_peek_last_error_all(const char **file, int *line,
const char **func,
const char **data, int *flags);
#ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0
unsigned long ERR_peek_last_error_line_data(const char **file, int *line,
const char **data, int *flags);
#endif
void ERR_clear_error(void);
char *ERR_error_string(unsigned long e, char *buf);
void ERR_error_string_n(unsigned long e, char *buf, size_t len);
const char *ERR_lib_error_string(unsigned long e);
#ifndef OPENSSL_NO_DEPRECATED_3_0
OSSL_DEPRECATEDIN_3_0 const char *ERR_func_error_string(unsigned long e);
#endif
const char *ERR_reason_error_string(unsigned long e);
void ERR_print_errors_cb(int (*cb)(const char *str, size_t len, void *u),
void *u);
#ifndef OPENSSL_NO_STDIO
void ERR_print_errors_fp(FILE *fp);
#endif
void ERR_print_errors(BIO *bp);
void ERR_add_error_data(int num, ...);
void ERR_add_error_vdata(int num, va_list args);
void ERR_add_error_txt(const char *sepr, const char *txt);
void ERR_add_error_mem_bio(const char *sep, BIO *bio);
int ERR_load_strings(int lib, ERR_STRING_DATA *str);
int ERR_load_strings_const(const ERR_STRING_DATA *str);
int ERR_unload_strings(int lib, ERR_STRING_DATA *str);
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
#define ERR_load_crypto_strings() \
OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL)
#define ERR_free_strings() \
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);
int ERR_set_mark(void);
int ERR_pop_to_mark(void);
int ERR_clear_last_mark(void);
int ERR_count_to_mark(void);
int ERR_pop(void);
ERR_STATE *OSSL_ERR_STATE_new(void);
void OSSL_ERR_STATE_save(ERR_STATE *es);
void OSSL_ERR_STATE_save_to_mark(ERR_STATE *es);
void OSSL_ERR_STATE_restore(const ERR_STATE *es);
void OSSL_ERR_STATE_free(ERR_STATE *es);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,131 @@
/*
* WARNING: do not edit!
* Generated by Makefile from include/openssl/ess.h.in
*
* Copyright 2019-2021 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
*/
/* clang-format off */
/* clang-format on */
#ifndef OPENSSL_ESS_H
#define OPENSSL_ESS_H
#pragma once
#include <openssl/opensslconf.h>
#include <openssl/safestack.h>
#include <openssl/x509.h>
#include <openssl/esserr.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct ESS_issuer_serial ESS_ISSUER_SERIAL;
typedef struct ESS_cert_id ESS_CERT_ID;
typedef struct ESS_signing_cert ESS_SIGNING_CERT;
/* clang-format off */
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_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))
#define sk_ESS_CERT_ID_delete(sk, i) ((ESS_CERT_ID *)OPENSSL_sk_delete(ossl_check_ESS_CERT_ID_sk_type(sk), (i)))
#define sk_ESS_CERT_ID_delete_ptr(sk, ptr) ((ESS_CERT_ID *)OPENSSL_sk_delete_ptr(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)))
#define sk_ESS_CERT_ID_push(sk, ptr) OPENSSL_sk_push(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr))
#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_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))
#define sk_ESS_CERT_ID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr))
#define sk_ESS_CERT_ID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr), pnum)
#define sk_ESS_CERT_ID_sort(sk) OPENSSL_sk_sort(ossl_check_ESS_CERT_ID_sk_type(sk))
#define sk_ESS_CERT_ID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ESS_CERT_ID_sk_type(sk))
#define sk_ESS_CERT_ID_dup(sk) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_dup(ossl_check_const_ESS_CERT_ID_sk_type(sk)))
#define sk_ESS_CERT_ID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_deep_copy(ossl_check_const_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_copyfunc_type(copyfunc), ossl_check_ESS_CERT_ID_freefunc_type(freefunc)))
#define sk_ESS_CERT_ID_set_cmp_func(sk, cmp) ((sk_ESS_CERT_ID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_compfunc_type(cmp)))
/* clang-format on */
typedef struct ESS_signing_cert_v2_st ESS_SIGNING_CERT_V2;
typedef struct ESS_cert_id_v2_st ESS_CERT_ID_V2;
/* clang-format off */
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_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))
#define sk_ESS_CERT_ID_V2_delete(sk, i) ((ESS_CERT_ID_V2 *)OPENSSL_sk_delete(ossl_check_ESS_CERT_ID_V2_sk_type(sk), (i)))
#define sk_ESS_CERT_ID_V2_delete_ptr(sk, ptr) ((ESS_CERT_ID_V2 *)OPENSSL_sk_delete_ptr(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)))
#define sk_ESS_CERT_ID_V2_push(sk, ptr) OPENSSL_sk_push(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr))
#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_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))
#define sk_ESS_CERT_ID_V2_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr))
#define sk_ESS_CERT_ID_V2_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr), pnum)
#define sk_ESS_CERT_ID_V2_sort(sk) OPENSSL_sk_sort(ossl_check_ESS_CERT_ID_V2_sk_type(sk))
#define sk_ESS_CERT_ID_V2_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk))
#define sk_ESS_CERT_ID_V2_dup(sk) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_dup(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk)))
#define sk_ESS_CERT_ID_V2_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_deep_copy(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_copyfunc_type(copyfunc), ossl_check_ESS_CERT_ID_V2_freefunc_type(freefunc)))
#define sk_ESS_CERT_ID_V2_set_cmp_func(sk, cmp) ((sk_ESS_CERT_ID_V2_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_compfunc_type(cmp)))
/* clang-format on */
DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_ISSUER_SERIAL)
DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_ISSUER_SERIAL, ESS_ISSUER_SERIAL)
DECLARE_ASN1_DUP_FUNCTION(ESS_ISSUER_SERIAL)
DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_CERT_ID)
DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_CERT_ID, ESS_CERT_ID)
DECLARE_ASN1_DUP_FUNCTION(ESS_CERT_ID)
DECLARE_ASN1_FUNCTIONS(ESS_SIGNING_CERT)
DECLARE_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT)
DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_CERT_ID_V2)
DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_CERT_ID_V2, ESS_CERT_ID_V2)
DECLARE_ASN1_DUP_FUNCTION(ESS_CERT_ID_V2)
DECLARE_ASN1_FUNCTIONS(ESS_SIGNING_CERT_V2)
DECLARE_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT_V2)
ESS_SIGNING_CERT *OSSL_ESS_signing_cert_new_init(const X509 *signcert,
const STACK_OF(X509) *certs,
int set_issuer_serial);
ESS_SIGNING_CERT_V2 *OSSL_ESS_signing_cert_v2_new_init(const EVP_MD *hash_alg,
const X509 *signcert,
const STACK_OF(X509) *certs,
int set_issuer_serial);
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);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,47 @@
/*
* WARNING: do not edit!
* Generated by Makefile from include/openssl/fipskey.h.in
*
* Copyright 2020-2024 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_FIPSKEY_H
#define OPENSSL_FIPSKEY_H
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
/*
* The FIPS validation HMAC key, usable as an array initializer.
*/
/* clang-format off */
#define FIPS_KEY_ELEMENTS \
0xf4, 0x55, 0x66, 0x50, 0xac, 0x31, 0xd3, 0x54, 0x61, 0x61, 0x0b, 0xac, 0x4e, 0xd8, 0x1b, 0x1a, 0x18, 0x1b, 0x2d, 0x8a, 0x43, 0xea, 0x28, 0x54, 0xcb, 0xae, 0x22, 0xca, 0x74, 0x56, 0x08, 0x13
/* clang-format on */
/*
* The FIPS validation key, as a string.
*/
/* clang-format off */
#define FIPS_KEY_STRING "f4556650ac31d35461610bac4ed81b1a181b2d8a43ea2854cbae22ca74560813"
/* clang-format on */
/*
* The FIPS provider vendor name, as a string.
*/
/* clang-format off */
#define FIPS_VENDOR "OpenSSL FIPS Provider"
/* clang-format on */
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,417 @@
/*
* Copyright 1995-2024 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
*/
/* clang-format off */
/* clang-format on */
/*
* Header for dynamic hash table routines Author - Eric Young
*/
#ifndef OPENSSL_LHASH_H
#define OPENSSL_LHASH_H
#pragma once
#include <openssl/macros.h>
#ifndef OPENSSL_NO_DEPRECATED_3_0
#define HEADER_LHASH_H
#endif
#include <openssl/e_os2.h>
#include <openssl/bio.h>
#ifndef OPENSSL_NO_STDIO
#include <stdio.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef struct lhash_node_st OPENSSL_LH_NODE;
typedef int (*OPENSSL_LH_COMPFUNC)(const void *, const void *);
typedef int (*OPENSSL_LH_COMPFUNCTHUNK)(const void *, const void *, OPENSSL_LH_COMPFUNC cfn);
typedef unsigned long (*OPENSSL_LH_HASHFUNC)(const void *);
typedef unsigned long (*OPENSSL_LH_HASHFUNCTHUNK)(const void *, OPENSSL_LH_HASHFUNC hfn);
typedef void (*OPENSSL_LH_DOALL_FUNC)(void *);
typedef void (*OPENSSL_LH_DOALL_FUNC_THUNK)(void *, OPENSSL_LH_DOALL_FUNC doall);
typedef void (*OPENSSL_LH_DOALL_FUNCARG)(void *, void *);
typedef void (*OPENSSL_LH_DOALL_FUNCARG_THUNK)(void *, void *, OPENSSL_LH_DOALL_FUNCARG doall);
typedef struct lhash_st OPENSSL_LHASH;
/*
* Macros for declaring and implementing type-safe wrappers for LHASH
* callbacks. This way, callbacks can be provided to LHASH structures without
* function pointer casting and the macro-defined callbacks provide
* per-variable casting before deferring to the underlying type-specific
* callbacks. NB: It is possible to place a "static" in front of both the
* DECLARE and IMPLEMENT macros if the functions are strictly internal.
*/
/* First: "hash" functions */
#define DECLARE_LHASH_HASH_FN(name, o_type) \
unsigned long name##_LHASH_HASH(const void *);
#define IMPLEMENT_LHASH_HASH_FN(name, o_type) \
unsigned long name##_LHASH_HASH(const void *arg) \
{ \
const o_type *a = arg; \
return name##_hash(a); \
}
#define LHASH_HASH_FN(name) name##_LHASH_HASH
/* Second: "compare" functions */
#define DECLARE_LHASH_COMP_FN(name, o_type) \
int name##_LHASH_COMP(const void *, const void *);
#define IMPLEMENT_LHASH_COMP_FN(name, o_type) \
int name##_LHASH_COMP(const void *arg1, const void *arg2) \
{ \
const o_type *a = arg1; \
const o_type *b = arg2; \
return name##_cmp(a, b); \
}
#define LHASH_COMP_FN(name) name##_LHASH_COMP
/* Fourth: "doall_arg" functions */
#define DECLARE_LHASH_DOALL_ARG_FN(name, o_type, a_type) \
void name##_LHASH_DOALL_ARG(void *, void *);
#define IMPLEMENT_LHASH_DOALL_ARG_FN(name, o_type, a_type) \
void name##_LHASH_DOALL_ARG(void *arg1, void *arg2) \
{ \
o_type *a = arg1; \
a_type *b = arg2; \
name##_doall_arg(a, b); \
}
#define LHASH_DOALL_ARG_FN(name) name##_LHASH_DOALL_ARG
#define LH_LOAD_MULT 256
int OPENSSL_LH_error(OPENSSL_LHASH *lh);
OPENSSL_LHASH *OPENSSL_LH_new(OPENSSL_LH_HASHFUNC h, OPENSSL_LH_COMPFUNC c);
OPENSSL_LHASH *OPENSSL_LH_set_thunks(OPENSSL_LHASH *lh,
OPENSSL_LH_HASHFUNCTHUNK hw,
OPENSSL_LH_COMPFUNCTHUNK cw,
OPENSSL_LH_DOALL_FUNC_THUNK daw,
OPENSSL_LH_DOALL_FUNCARG_THUNK daaw);
void OPENSSL_LH_free(OPENSSL_LHASH *lh);
void OPENSSL_LH_flush(OPENSSL_LHASH *lh);
void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data);
void *OPENSSL_LH_delete(OPENSSL_LHASH *lh, const void *data);
void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data);
void OPENSSL_LH_doall(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNC func);
void OPENSSL_LH_doall_arg(OPENSSL_LHASH *lh,
OPENSSL_LH_DOALL_FUNCARG func, void *arg);
void OPENSSL_LH_doall_arg_thunk(OPENSSL_LHASH *lh,
OPENSSL_LH_DOALL_FUNCARG_THUNK daaw,
OPENSSL_LH_DOALL_FUNCARG fn, void *arg);
unsigned long OPENSSL_LH_strhash(const char *c);
unsigned long OPENSSL_LH_num_items(const OPENSSL_LHASH *lh);
unsigned long OPENSSL_LH_get_down_load(const OPENSSL_LHASH *lh);
void OPENSSL_LH_set_down_load(OPENSSL_LHASH *lh, unsigned long down_load);
#ifndef OPENSSL_NO_STDIO
#ifndef OPENSSL_NO_DEPRECATED_3_1
OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_stats(const OPENSSL_LHASH *lh, FILE *fp);
OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_stats(const OPENSSL_LHASH *lh, FILE *fp);
OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_usage_stats(const OPENSSL_LHASH *lh, FILE *fp);
#endif
#endif
#ifndef OPENSSL_NO_DEPRECATED_3_1
OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out);
OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_stats_bio(const OPENSSL_LHASH *lh, BIO *out);
OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out);
#endif
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
#define _LHASH OPENSSL_LHASH
#define LHASH_NODE OPENSSL_LH_NODE
#define lh_error OPENSSL_LH_error
#define lh_new OPENSSL_LH_new
#define lh_free OPENSSL_LH_free
#define lh_insert OPENSSL_LH_insert
#define lh_delete OPENSSL_LH_delete
#define lh_retrieve OPENSSL_LH_retrieve
#define lh_doall OPENSSL_LH_doall
#define lh_doall_arg OPENSSL_LH_doall_arg
#define lh_strhash OPENSSL_LH_strhash
#define lh_num_items OPENSSL_LH_num_items
#ifndef OPENSSL_NO_STDIO
#define lh_stats OPENSSL_LH_stats
#define lh_node_stats OPENSSL_LH_node_stats
#define lh_node_usage_stats OPENSSL_LH_node_usage_stats
#endif
#define lh_stats_bio OPENSSL_LH_stats_bio
#define lh_node_stats_bio OPENSSL_LH_node_stats_bio
#define lh_node_usage_stats_bio OPENSSL_LH_node_usage_stats_bio
#endif
/* Type checking... */
#define LHASH_OF(type) struct lhash_st_##type
/* Helper macro for internal use */
#define DEFINE_LHASH_OF_INTERNAL(type) \
LHASH_OF(type) \
{ \
union lh_##type##_dummy { \
void *d1; \
unsigned long d2; \
int d3; \
} dummy; \
}; \
typedef int (*lh_##type##_compfunc)(const type *a, const type *b); \
typedef unsigned long (*lh_##type##_hashfunc)(const type *a); \
typedef void (*lh_##type##_doallfunc)(type * a); \
static ossl_inline unsigned long lh_##type##_hash_thunk(const void *data, OPENSSL_LH_HASHFUNC hfn) \
{ \
unsigned long (*hfn_conv)(const type *) = (unsigned long (*)(const type *))hfn; \
return hfn_conv((const type *)data); \
} \
static ossl_inline int lh_##type##_comp_thunk(const void *da, const void *db, OPENSSL_LH_COMPFUNC cfn) \
{ \
int (*cfn_conv)(const type *, const type *) = (int (*)(const type *, const type *))cfn; \
return cfn_conv((const type *)da, (const type *)db); \
} \
static ossl_inline void lh_##type##_doall_thunk(void *node, OPENSSL_LH_DOALL_FUNC doall) \
{ \
void (*doall_conv)(type *) = (void (*)(type *))doall; \
doall_conv((type *)node); \
} \
static ossl_inline void lh_##type##_doall_arg_thunk(void *node, void *arg, OPENSSL_LH_DOALL_FUNCARG doall) \
{ \
void (*doall_conv)(type *, void *) = (void (*)(type *, void *))doall; \
doall_conv((type *)node, arg); \
} \
static ossl_unused ossl_inline type * \
ossl_check_##type##_lh_plain_type(type *ptr) \
{ \
return ptr; \
} \
static ossl_unused ossl_inline const type * \
ossl_check_const_##type##_lh_plain_type(const type *ptr) \
{ \
return ptr; \
} \
static ossl_unused ossl_inline const OPENSSL_LHASH * \
ossl_check_const_##type##_lh_type(const LHASH_OF(type) *lh) \
{ \
return (const OPENSSL_LHASH *)lh; \
} \
static ossl_unused ossl_inline OPENSSL_LHASH * \
ossl_check_##type##_lh_type(LHASH_OF(type) *lh) \
{ \
return (OPENSSL_LHASH *)lh; \
} \
static ossl_unused ossl_inline OPENSSL_LH_COMPFUNC \
ossl_check_##type##_lh_compfunc_type(lh_##type##_compfunc cmp) \
{ \
return (OPENSSL_LH_COMPFUNC)cmp; \
} \
static ossl_unused ossl_inline OPENSSL_LH_HASHFUNC \
ossl_check_##type##_lh_hashfunc_type(lh_##type##_hashfunc hfn) \
{ \
return (OPENSSL_LH_HASHFUNC)hfn; \
} \
static ossl_unused ossl_inline OPENSSL_LH_DOALL_FUNC \
ossl_check_##type##_lh_doallfunc_type(lh_##type##_doallfunc dfn) \
{ \
return (OPENSSL_LH_DOALL_FUNC)dfn; \
} \
LHASH_OF(type)
#ifndef OPENSSL_NO_DEPRECATED_3_1
#define DEFINE_LHASH_OF_DEPRECATED(type) \
static ossl_unused ossl_inline void \
lh_##type##_node_stats_bio(const LHASH_OF(type) *lh, BIO *out) \
{ \
OPENSSL_LH_node_stats_bio((const OPENSSL_LHASH *)lh, out); \
} \
static ossl_unused ossl_inline void \
lh_##type##_node_usage_stats_bio(const LHASH_OF(type) *lh, BIO *out) \
{ \
OPENSSL_LH_node_usage_stats_bio((const OPENSSL_LHASH *)lh, out); \
} \
static ossl_unused ossl_inline void \
lh_##type##_stats_bio(const LHASH_OF(type) *lh, BIO *out) \
{ \
OPENSSL_LH_stats_bio((const OPENSSL_LHASH *)lh, out); \
}
#else
#define DEFINE_LHASH_OF_DEPRECATED(type)
#endif
#define DEFINE_LHASH_OF_EX(type) \
LHASH_OF(type) \
{ \
union lh_##type##_dummy { \
void *d1; \
unsigned long d2; \
int d3; \
} dummy; \
}; \
static unsigned long \
lh_##type##_hfn_thunk(const void *data, OPENSSL_LH_HASHFUNC hfn) \
{ \
unsigned long (*hfn_conv)(const type *) = (unsigned long (*)(const type *))hfn; \
return hfn_conv((const type *)data); \
} \
static int lh_##type##_cfn_thunk(const void *da, const void *db, OPENSSL_LH_COMPFUNC cfn) \
{ \
int (*cfn_conv)(const type *, const type *) = (int (*)(const type *, const type *))cfn; \
return cfn_conv((const type *)da, (const type *)db); \
} \
static ossl_unused ossl_inline void \
lh_##type##_free(LHASH_OF(type) *lh) \
{ \
OPENSSL_LH_free((OPENSSL_LHASH *)lh); \
} \
static ossl_unused ossl_inline void \
lh_##type##_flush(LHASH_OF(type) *lh) \
{ \
OPENSSL_LH_flush((OPENSSL_LHASH *)lh); \
} \
static ossl_unused ossl_inline type * \
lh_##type##_insert(LHASH_OF(type) *lh, type *d) \
{ \
return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d); \
} \
static ossl_unused ossl_inline type * \
lh_##type##_delete(LHASH_OF(type) *lh, const type *d) \
{ \
return (type *)OPENSSL_LH_delete((OPENSSL_LHASH *)lh, d); \
} \
static ossl_unused ossl_inline type * \
lh_##type##_retrieve(LHASH_OF(type) *lh, const type *d) \
{ \
return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d); \
} \
static ossl_unused ossl_inline int \
lh_##type##_error(LHASH_OF(type) *lh) \
{ \
return OPENSSL_LH_error((OPENSSL_LHASH *)lh); \
} \
static ossl_unused ossl_inline unsigned long \
lh_##type##_num_items(LHASH_OF(type) *lh) \
{ \
return OPENSSL_LH_num_items((OPENSSL_LHASH *)lh); \
} \
static ossl_unused ossl_inline unsigned long \
lh_##type##_get_down_load(LHASH_OF(type) *lh) \
{ \
return OPENSSL_LH_get_down_load((OPENSSL_LHASH *)lh); \
} \
static ossl_unused ossl_inline void \
lh_##type##_set_down_load(LHASH_OF(type) *lh, unsigned long dl) \
{ \
OPENSSL_LH_set_down_load((OPENSSL_LHASH *)lh, dl); \
} \
static ossl_unused ossl_inline void \
lh_##type##_doall_thunk(void *node, OPENSSL_LH_DOALL_FUNC doall) \
{ \
void (*doall_conv)(type *) = (void (*)(type *))doall; \
doall_conv((type *)node); \
} \
static ossl_unused ossl_inline void \
lh_##type##_doall_arg_thunk(void *node, void *arg, OPENSSL_LH_DOALL_FUNCARG doall) \
{ \
void (*doall_conv)(type *, void *) = (void (*)(type *, void *))doall; \
doall_conv((type *)node, arg); \
} \
static ossl_unused ossl_inline void \
lh_##type##_doall(LHASH_OF(type) *lh, void (*doall)(type *)) \
{ \
OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall); \
} \
static ossl_unused ossl_inline LHASH_OF(type) * \
lh_##type##_new(unsigned long (*hfn)(const type *), \
int (*cfn)(const type *, const type *)) \
{ \
return (LHASH_OF(type) *)OPENSSL_LH_set_thunks(OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn), \
lh_##type##_hfn_thunk, lh_##type##_cfn_thunk, \
lh_##type##_doall_thunk, \
lh_##type##_doall_arg_thunk); \
} \
static ossl_unused ossl_inline void \
lh_##type##_doall_arg(LHASH_OF(type) *lh, \
void (*doallarg)(type *, void *), void *arg) \
{ \
OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, \
(OPENSSL_LH_DOALL_FUNCARG)doallarg, arg); \
} \
LHASH_OF(type)
#define DEFINE_LHASH_OF(type) \
DEFINE_LHASH_OF_EX(type); \
DEFINE_LHASH_OF_DEPRECATED(type) \
LHASH_OF(type)
#define IMPLEMENT_LHASH_DOALL_ARG_CONST(type, argtype) \
int_implement_lhash_doall(type, argtype, const type)
#define IMPLEMENT_LHASH_DOALL_ARG(type, argtype) \
int_implement_lhash_doall(type, argtype, type)
#define int_implement_lhash_doall(type, argtype, cbargtype) \
static ossl_unused ossl_inline void \
lh_##type##_doall_##argtype##_thunk(void *node, void *arg, OPENSSL_LH_DOALL_FUNCARG fn) \
{ \
void (*fn_conv)(cbargtype *, argtype *) = (void (*)(cbargtype *, argtype *))fn; \
fn_conv((cbargtype *)node, (argtype *)arg); \
} \
static ossl_unused ossl_inline void \
lh_##type##_doall_##argtype(LHASH_OF(type) *lh, \
void (*fn)(cbargtype *, argtype *), \
argtype *arg) \
{ \
OPENSSL_LH_doall_arg_thunk((OPENSSL_LHASH *)lh, \
lh_##type##_doall_##argtype##_thunk, \
(OPENSSL_LH_DOALL_FUNCARG)fn, \
(void *)arg); \
} \
LHASH_OF(type)
/* clang-format off */
DEFINE_LHASH_OF_INTERNAL(OPENSSL_STRING);
#define lh_OPENSSL_STRING_new(hfn, cmp) ((LHASH_OF(OPENSSL_STRING) *)OPENSSL_LH_set_thunks(OPENSSL_LH_new(ossl_check_OPENSSL_STRING_lh_hashfunc_type(hfn), ossl_check_OPENSSL_STRING_lh_compfunc_type(cmp)), lh_OPENSSL_STRING_hash_thunk, lh_OPENSSL_STRING_comp_thunk, lh_OPENSSL_STRING_doall_thunk, lh_OPENSSL_STRING_doall_arg_thunk))
#define lh_OPENSSL_STRING_free(lh) OPENSSL_LH_free(ossl_check_OPENSSL_STRING_lh_type(lh))
#define lh_OPENSSL_STRING_flush(lh) OPENSSL_LH_flush(ossl_check_OPENSSL_STRING_lh_type(lh))
#define lh_OPENSSL_STRING_insert(lh, ptr) ((OPENSSL_STRING *)OPENSSL_LH_insert(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_OPENSSL_STRING_lh_plain_type(ptr)))
#define lh_OPENSSL_STRING_delete(lh, ptr) ((OPENSSL_STRING *)OPENSSL_LH_delete(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_const_OPENSSL_STRING_lh_plain_type(ptr)))
#define lh_OPENSSL_STRING_retrieve(lh, ptr) ((OPENSSL_STRING *)OPENSSL_LH_retrieve(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_const_OPENSSL_STRING_lh_plain_type(ptr)))
#define lh_OPENSSL_STRING_error(lh) OPENSSL_LH_error(ossl_check_OPENSSL_STRING_lh_type(lh))
#define lh_OPENSSL_STRING_num_items(lh) OPENSSL_LH_num_items(ossl_check_OPENSSL_STRING_lh_type(lh))
#define lh_OPENSSL_STRING_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_OPENSSL_STRING_lh_type(lh), out)
#define lh_OPENSSL_STRING_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_OPENSSL_STRING_lh_type(lh), out)
#define lh_OPENSSL_STRING_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_OPENSSL_STRING_lh_type(lh), out)
#define lh_OPENSSL_STRING_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_OPENSSL_STRING_lh_type(lh))
#define lh_OPENSSL_STRING_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_OPENSSL_STRING_lh_type(lh), dl)
#define lh_OPENSSL_STRING_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_OPENSSL_STRING_lh_doallfunc_type(dfn))
DEFINE_LHASH_OF_INTERNAL(OPENSSL_CSTRING);
#define lh_OPENSSL_CSTRING_new(hfn, cmp) ((LHASH_OF(OPENSSL_CSTRING) *)OPENSSL_LH_set_thunks(OPENSSL_LH_new(ossl_check_OPENSSL_CSTRING_lh_hashfunc_type(hfn), ossl_check_OPENSSL_CSTRING_lh_compfunc_type(cmp)), lh_OPENSSL_CSTRING_hash_thunk, lh_OPENSSL_CSTRING_comp_thunk, lh_OPENSSL_CSTRING_doall_thunk, lh_OPENSSL_CSTRING_doall_arg_thunk))
#define lh_OPENSSL_CSTRING_free(lh) OPENSSL_LH_free(ossl_check_OPENSSL_CSTRING_lh_type(lh))
#define lh_OPENSSL_CSTRING_flush(lh) OPENSSL_LH_flush(ossl_check_OPENSSL_CSTRING_lh_type(lh))
#define lh_OPENSSL_CSTRING_insert(lh, ptr) ((OPENSSL_CSTRING *)OPENSSL_LH_insert(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_OPENSSL_CSTRING_lh_plain_type(ptr)))
#define lh_OPENSSL_CSTRING_delete(lh, ptr) ((OPENSSL_CSTRING *)OPENSSL_LH_delete(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_const_OPENSSL_CSTRING_lh_plain_type(ptr)))
#define lh_OPENSSL_CSTRING_retrieve(lh, ptr) ((OPENSSL_CSTRING *)OPENSSL_LH_retrieve(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_const_OPENSSL_CSTRING_lh_plain_type(ptr)))
#define lh_OPENSSL_CSTRING_error(lh) OPENSSL_LH_error(ossl_check_OPENSSL_CSTRING_lh_type(lh))
#define lh_OPENSSL_CSTRING_num_items(lh) OPENSSL_LH_num_items(ossl_check_OPENSSL_CSTRING_lh_type(lh))
#define lh_OPENSSL_CSTRING_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_OPENSSL_CSTRING_lh_type(lh), out)
#define lh_OPENSSL_CSTRING_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_OPENSSL_CSTRING_lh_type(lh), out)
#define lh_OPENSSL_CSTRING_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_OPENSSL_CSTRING_lh_type(lh), out)
#define lh_OPENSSL_CSTRING_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_OPENSSL_CSTRING_lh_type(lh))
#define lh_OPENSSL_CSTRING_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_OPENSSL_CSTRING_lh_type(lh), dl)
#define lh_OPENSSL_CSTRING_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_OPENSSL_CSTRING_lh_doallfunc_type(dfn))
/* clang-format on */
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,487 @@
/*
* WARNING: do not edit!
* Generated by Makefile from include/openssl/ocsp.h.in
*
* Copyright 2000-2021 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
*/
/* clang-format off */
/* clang-format on */
#ifndef OPENSSL_OCSP_H
#define OPENSSL_OCSP_H
#pragma once
#include <openssl/macros.h>
#ifndef OPENSSL_NO_DEPRECATED_3_0
#define HEADER_OCSP_H
#endif
#include <openssl/opensslconf.h>
#include <openssl/http.h>
#include <openssl/asn1.h>
/*
* These definitions are outside the OPENSSL_NO_OCSP guard because although for
* historical reasons they have OCSP_* names, they can actually be used
* independently of OCSP. E.g. see RFC5280
*/
/*-
* CRLReason ::= ENUMERATED {
* unspecified (0),
* keyCompromise (1),
* cACompromise (2),
* affiliationChanged (3),
* superseded (4),
* cessationOfOperation (5),
* certificateHold (6),
* -- value 7 is not used
* removeFromCRL (8),
* privilegeWithdrawn (9),
* aACompromise (10) }
*/
#define OCSP_REVOKED_STATUS_NOSTATUS -1
#define OCSP_REVOKED_STATUS_UNSPECIFIED 0
#define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1
#define OCSP_REVOKED_STATUS_CACOMPROMISE 2
#define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3
#define OCSP_REVOKED_STATUS_SUPERSEDED 4
#define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5
#define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6
#define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8
#define OCSP_REVOKED_STATUS_PRIVILEGEWITHDRAWN 9
#define OCSP_REVOKED_STATUS_AACOMPROMISE 10
#ifndef OPENSSL_NO_OCSP
#include <openssl/x509.h>
#include <openssl/x509v3.h>
#include <openssl/safestack.h>
#include <openssl/ocsperr.h>
#ifdef __cplusplus
extern "C" {
#endif
/* Various flags and values */
#define OCSP_DEFAULT_NONCE_LENGTH 16
#define OCSP_NOCERTS 0x1
#define OCSP_NOINTERN 0x2
#define OCSP_NOSIGS 0x4
#define OCSP_NOCHAIN 0x8
#define OCSP_NOVERIFY 0x10
#define OCSP_NOEXPLICIT 0x20
#define OCSP_NOCASIGN 0x40
#define OCSP_NODELEGATED 0x80
#define OCSP_NOCHECKS 0x100
#define OCSP_TRUSTOTHER 0x200
#define OCSP_RESPID_KEY 0x400
#define OCSP_NOTIME 0x800
#define OCSP_PARTIAL_CHAIN 0x1000
typedef struct ocsp_cert_id_st OCSP_CERTID;
typedef struct ocsp_one_request_st OCSP_ONEREQ;
typedef struct ocsp_req_info_st OCSP_REQINFO;
typedef struct ocsp_signature_st OCSP_SIGNATURE;
typedef struct ocsp_request_st OCSP_REQUEST;
/* clang-format off */
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_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))
#define sk_OCSP_CERTID_delete(sk, i) ((OCSP_CERTID *)OPENSSL_sk_delete(ossl_check_OCSP_CERTID_sk_type(sk), (i)))
#define sk_OCSP_CERTID_delete_ptr(sk, ptr) ((OCSP_CERTID *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)))
#define sk_OCSP_CERTID_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr))
#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_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))
#define sk_OCSP_CERTID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr))
#define sk_OCSP_CERTID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr), pnum)
#define sk_OCSP_CERTID_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_CERTID_sk_type(sk))
#define sk_OCSP_CERTID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_CERTID_sk_type(sk))
#define sk_OCSP_CERTID_dup(sk) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_dup(ossl_check_const_OCSP_CERTID_sk_type(sk)))
#define sk_OCSP_CERTID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_copyfunc_type(copyfunc), ossl_check_OCSP_CERTID_freefunc_type(freefunc)))
#define sk_OCSP_CERTID_set_cmp_func(sk, cmp) ((sk_OCSP_CERTID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_compfunc_type(cmp)))
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_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))
#define sk_OCSP_ONEREQ_delete(sk, i) ((OCSP_ONEREQ *)OPENSSL_sk_delete(ossl_check_OCSP_ONEREQ_sk_type(sk), (i)))
#define sk_OCSP_ONEREQ_delete_ptr(sk, ptr) ((OCSP_ONEREQ *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)))
#define sk_OCSP_ONEREQ_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr))
#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_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))
#define sk_OCSP_ONEREQ_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr))
#define sk_OCSP_ONEREQ_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr), pnum)
#define sk_OCSP_ONEREQ_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_ONEREQ_sk_type(sk))
#define sk_OCSP_ONEREQ_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_ONEREQ_sk_type(sk))
#define sk_OCSP_ONEREQ_dup(sk) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_dup(ossl_check_const_OCSP_ONEREQ_sk_type(sk)))
#define sk_OCSP_ONEREQ_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_copyfunc_type(copyfunc), ossl_check_OCSP_ONEREQ_freefunc_type(freefunc)))
#define sk_OCSP_ONEREQ_set_cmp_func(sk, cmp) ((sk_OCSP_ONEREQ_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_compfunc_type(cmp)))
/* clang-format on */
#define OCSP_RESPONSE_STATUS_SUCCESSFUL 0
#define OCSP_RESPONSE_STATUS_MALFORMEDREQUEST 1
#define OCSP_RESPONSE_STATUS_INTERNALERROR 2
#define OCSP_RESPONSE_STATUS_TRYLATER 3
#define OCSP_RESPONSE_STATUS_SIGREQUIRED 5
#define OCSP_RESPONSE_STATUS_UNAUTHORIZED 6
typedef struct ocsp_resp_bytes_st OCSP_RESPBYTES;
#define V_OCSP_RESPID_NAME 0
#define V_OCSP_RESPID_KEY 1
/* clang-format off */
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_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))
#define sk_OCSP_RESPID_delete(sk, i) ((OCSP_RESPID *)OPENSSL_sk_delete(ossl_check_OCSP_RESPID_sk_type(sk), (i)))
#define sk_OCSP_RESPID_delete_ptr(sk, ptr) ((OCSP_RESPID *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)))
#define sk_OCSP_RESPID_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr))
#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_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))
#define sk_OCSP_RESPID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr))
#define sk_OCSP_RESPID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr), pnum)
#define sk_OCSP_RESPID_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_RESPID_sk_type(sk))
#define sk_OCSP_RESPID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_RESPID_sk_type(sk))
#define sk_OCSP_RESPID_dup(sk) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_dup(ossl_check_const_OCSP_RESPID_sk_type(sk)))
#define sk_OCSP_RESPID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_copyfunc_type(copyfunc), ossl_check_OCSP_RESPID_freefunc_type(freefunc)))
#define sk_OCSP_RESPID_set_cmp_func(sk, cmp) ((sk_OCSP_RESPID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_compfunc_type(cmp)))
/* clang-format on */
typedef struct ocsp_revoked_info_st OCSP_REVOKEDINFO;
#define V_OCSP_CERTSTATUS_GOOD 0
#define V_OCSP_CERTSTATUS_REVOKED 1
#define V_OCSP_CERTSTATUS_UNKNOWN 2
typedef struct ocsp_cert_status_st OCSP_CERTSTATUS;
typedef struct ocsp_single_response_st OCSP_SINGLERESP;
/* clang-format off */
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_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))
#define sk_OCSP_SINGLERESP_delete(sk, i) ((OCSP_SINGLERESP *)OPENSSL_sk_delete(ossl_check_OCSP_SINGLERESP_sk_type(sk), (i)))
#define sk_OCSP_SINGLERESP_delete_ptr(sk, ptr) ((OCSP_SINGLERESP *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)))
#define sk_OCSP_SINGLERESP_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr))
#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_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))
#define sk_OCSP_SINGLERESP_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr))
#define sk_OCSP_SINGLERESP_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr), pnum)
#define sk_OCSP_SINGLERESP_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_SINGLERESP_sk_type(sk))
#define sk_OCSP_SINGLERESP_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_SINGLERESP_sk_type(sk))
#define sk_OCSP_SINGLERESP_dup(sk) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_dup(ossl_check_const_OCSP_SINGLERESP_sk_type(sk)))
#define sk_OCSP_SINGLERESP_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_copyfunc_type(copyfunc), ossl_check_OCSP_SINGLERESP_freefunc_type(freefunc)))
#define sk_OCSP_SINGLERESP_set_cmp_func(sk, cmp) ((sk_OCSP_SINGLERESP_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_compfunc_type(cmp)))
/* clang-format on */
typedef struct ocsp_response_data_st OCSP_RESPDATA;
typedef struct ocsp_basic_response_st OCSP_BASICRESP;
typedef struct ocsp_crl_id_st OCSP_CRLID;
typedef struct ocsp_service_locator_st OCSP_SERVICELOC;
#define PEM_STRING_OCSP_REQUEST "OCSP REQUEST"
#define PEM_STRING_OCSP_RESPONSE "OCSP RESPONSE"
#define d2i_OCSP_REQUEST_bio(bp, p) ASN1_d2i_bio_of(OCSP_REQUEST, OCSP_REQUEST_new, d2i_OCSP_REQUEST, bp, p)
#define d2i_OCSP_RESPONSE_bio(bp, p) ASN1_d2i_bio_of(OCSP_RESPONSE, OCSP_RESPONSE_new, d2i_OCSP_RESPONSE, bp, p)
#define PEM_read_bio_OCSP_REQUEST(bp, x, cb) (OCSP_REQUEST *)PEM_ASN1_read_bio( \
(d2i_of_void *)d2i_OCSP_REQUEST, PEM_STRING_OCSP_REQUEST, \
bp, (char **)(x), cb, NULL)
#define PEM_read_bio_OCSP_RESPONSE(bp, x, cb) (OCSP_RESPONSE *)PEM_ASN1_read_bio( \
(d2i_of_void *)d2i_OCSP_RESPONSE, PEM_STRING_OCSP_RESPONSE, \
bp, (char **)(x), cb, NULL)
#define PEM_write_bio_OCSP_REQUEST(bp, o) \
PEM_ASN1_write_bio((i2d_of_void *)i2d_OCSP_REQUEST, PEM_STRING_OCSP_REQUEST, \
bp, (char *)(o), NULL, NULL, 0, NULL, NULL)
#define PEM_write_bio_OCSP_RESPONSE(bp, o) \
PEM_ASN1_write_bio((i2d_of_void *)i2d_OCSP_RESPONSE, PEM_STRING_OCSP_RESPONSE, \
bp, (char *)(o), NULL, NULL, 0, NULL, NULL)
#define i2d_OCSP_RESPONSE_bio(bp, o) ASN1_i2d_bio_of(OCSP_RESPONSE, i2d_OCSP_RESPONSE, bp, o)
#define i2d_OCSP_REQUEST_bio(bp, o) ASN1_i2d_bio_of(OCSP_REQUEST, i2d_OCSP_REQUEST, bp, o)
#define ASN1_BIT_STRING_digest(data, type, md, len) \
ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING), type, data, md, len)
#define OCSP_CERTSTATUS_dup(cs) \
(OCSP_CERTSTATUS *)ASN1_dup((i2d_of_void *)i2d_OCSP_CERTSTATUS, \
(d2i_of_void *)d2i_OCSP_CERTSTATUS, (char *)(cs))
DECLARE_ASN1_DUP_FUNCTION(OCSP_CERTID)
OSSL_HTTP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path,
const OCSP_REQUEST *req, int buf_size);
OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req);
#ifndef OPENSSL_NO_DEPRECATED_3_0
typedef OSSL_HTTP_REQ_CTX OCSP_REQ_CTX;
#define OCSP_REQ_CTX_new(io, buf_size) \
OSSL_HTTP_REQ_CTX_new(io, io, buf_size)
#define OCSP_REQ_CTX_free OSSL_HTTP_REQ_CTX_free
#define OCSP_REQ_CTX_http(rctx, op, path) \
(OSSL_HTTP_REQ_CTX_set_expected(rctx, NULL, 1 /* asn1 */, 0, 0) && OSSL_HTTP_REQ_CTX_set_request_line(rctx, strcmp(op, "POST") == 0, NULL, NULL, path))
#define OCSP_REQ_CTX_add1_header OSSL_HTTP_REQ_CTX_add1_header
#define OCSP_REQ_CTX_i2d(r, it, req) \
OSSL_HTTP_REQ_CTX_set1_req(r, "application/ocsp-request", it, req)
#define OCSP_REQ_CTX_set1_req(r, req) \
OCSP_REQ_CTX_i2d(r, ASN1_ITEM_rptr(OCSP_REQUEST), (ASN1_VALUE *)(req))
#define OCSP_REQ_CTX_nbio OSSL_HTTP_REQ_CTX_nbio
#define OCSP_REQ_CTX_nbio_d2i OSSL_HTTP_REQ_CTX_nbio_d2i
#define OCSP_sendreq_nbio(p, r) \
OSSL_HTTP_REQ_CTX_nbio_d2i(r, (ASN1_VALUE **)(p), \
ASN1_ITEM_rptr(OCSP_RESPONSE))
#define OCSP_REQ_CTX_get0_mem_bio OSSL_HTTP_REQ_CTX_get0_mem_bio
#define OCSP_set_max_response_length OSSL_HTTP_REQ_CTX_set_max_response_length
#endif
OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, const X509 *subject,
const X509 *issuer);
OCSP_CERTID *OCSP_cert_id_new(const EVP_MD *dgst,
const X509_NAME *issuerName,
const ASN1_BIT_STRING *issuerKey,
const ASN1_INTEGER *serialNumber);
OCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *req, OCSP_CERTID *cid);
int OCSP_request_add1_nonce(OCSP_REQUEST *req, unsigned char *val, int len);
int OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len);
int OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *bs);
int OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req);
int OCSP_request_set1_name(OCSP_REQUEST *req, const X509_NAME *nm);
int OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert);
int OCSP_request_sign(OCSP_REQUEST *req,
X509 *signer,
EVP_PKEY *key,
const EVP_MD *dgst,
STACK_OF(X509) *certs, unsigned long flags);
int OCSP_response_status(OCSP_RESPONSE *resp);
OCSP_BASICRESP *OCSP_response_get1_basic(OCSP_RESPONSE *resp);
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);
int OCSP_resp_count(OCSP_BASICRESP *bs);
OCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx);
const ASN1_GENERALIZEDTIME *OCSP_resp_get0_produced_at(const OCSP_BASICRESP *bs);
const STACK_OF(X509) *OCSP_resp_get0_certs(const OCSP_BASICRESP *bs);
int OCSP_resp_get0_id(const OCSP_BASICRESP *bs,
const ASN1_OCTET_STRING **pid,
const X509_NAME **pname);
int OCSP_resp_get1_id(const OCSP_BASICRESP *bs,
ASN1_OCTET_STRING **pid,
X509_NAME **pname);
int OCSP_resp_find(OCSP_BASICRESP *bs, OCSP_CERTID *id, int last);
int OCSP_single_get0_status(OCSP_SINGLERESP *single, int *reason,
ASN1_GENERALIZEDTIME **revtime,
ASN1_GENERALIZEDTIME **thisupd,
ASN1_GENERALIZEDTIME **nextupd);
int OCSP_resp_find_status(OCSP_BASICRESP *bs, OCSP_CERTID *id, int *status,
int *reason,
ASN1_GENERALIZEDTIME **revtime,
ASN1_GENERALIZEDTIME **thisupd,
ASN1_GENERALIZEDTIME **nextupd);
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,
X509_STORE *store, unsigned long flags);
#define OCSP_parse_url(url, host, port, path, ssl) \
OSSL_HTTP_parse_url(url, ssl, NULL, host, port, NULL, path, NULL, NULL)
int OCSP_id_issuer_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b);
int OCSP_id_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b);
int OCSP_request_onereq_count(OCSP_REQUEST *req);
OCSP_ONEREQ *OCSP_request_onereq_get0(OCSP_REQUEST *req, int i);
OCSP_CERTID *OCSP_onereq_get0_id(OCSP_ONEREQ *one);
int OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd,
ASN1_OCTET_STRING **pikeyHash,
ASN1_INTEGER **pserial, OCSP_CERTID *cid);
int OCSP_request_is_signed(OCSP_REQUEST *req);
OCSP_RESPONSE *OCSP_response_create(int status, OCSP_BASICRESP *bs);
OCSP_SINGLERESP *OCSP_basic_add1_status(OCSP_BASICRESP *rsp,
OCSP_CERTID *cid,
int status, int reason,
ASN1_TIME *revtime,
ASN1_TIME *thisupd,
ASN1_TIME *nextupd);
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);
int OCSP_basic_sign_ctx(OCSP_BASICRESP *brsp,
X509 *signer, EVP_MD_CTX *ctx,
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);
int OCSP_RESPID_set_by_key(OCSP_RESPID *respid, X509 *cert);
int OCSP_RESPID_match_ex(OCSP_RESPID *respid, X509 *cert, OSSL_LIB_CTX *libctx,
const char *propq);
int OCSP_RESPID_match(OCSP_RESPID *respid, X509 *cert);
X509_EXTENSION *OCSP_crlID_new(const char *url, long *n, char *tim);
X509_EXTENSION *OCSP_accept_responses_new(char **oids);
X509_EXTENSION *OCSP_archive_cutoff_new(char *tim);
X509_EXTENSION *OCSP_url_svcloc_new(const X509_NAME *issuer, const char **urls);
int OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x);
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);
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_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);
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_BASICRESP_get_ext_count(OCSP_BASICRESP *x);
int OCSP_BASICRESP_get_ext_by_NID(OCSP_BASICRESP *x, int nid, int lastpos);
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);
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_SINGLERESP_get_ext_count(OCSP_SINGLERESP *x);
int OCSP_SINGLERESP_get_ext_by_NID(OCSP_SINGLERESP *x, int nid, int lastpos);
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);
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);
const OCSP_CERTID *OCSP_SINGLERESP_get0_id(const OCSP_SINGLERESP *x);
DECLARE_ASN1_FUNCTIONS(OCSP_SINGLERESP)
DECLARE_ASN1_FUNCTIONS(OCSP_CERTSTATUS)
DECLARE_ASN1_FUNCTIONS(OCSP_REVOKEDINFO)
DECLARE_ASN1_FUNCTIONS(OCSP_BASICRESP)
DECLARE_ASN1_FUNCTIONS(OCSP_RESPDATA)
DECLARE_ASN1_FUNCTIONS(OCSP_RESPID)
DECLARE_ASN1_FUNCTIONS(OCSP_RESPONSE)
DECLARE_ASN1_FUNCTIONS(OCSP_RESPBYTES)
DECLARE_ASN1_FUNCTIONS(OCSP_ONEREQ)
DECLARE_ASN1_FUNCTIONS(OCSP_CERTID)
DECLARE_ASN1_FUNCTIONS(OCSP_REQUEST)
DECLARE_ASN1_FUNCTIONS(OCSP_SIGNATURE)
DECLARE_ASN1_FUNCTIONS(OCSP_REQINFO)
DECLARE_ASN1_FUNCTIONS(OCSP_CRLID)
DECLARE_ASN1_FUNCTIONS(OCSP_SERVICELOC)
const char *OCSP_response_status_str(long s);
const char *OCSP_cert_status_str(long s);
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,
X509_STORE *st, unsigned long flags);
#ifdef __cplusplus
}
#endif
#endif /* !defined(OPENSSL_NO_OCSP) */
#endif
@@ -0,0 +1,131 @@
/*
* WARNING: do not edit!
* Generated by Makefile from include/openssl/opensslv.h.in
*
* Copyright 1999-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
*/
#ifndef OPENSSL_OPENSSLV_H
#define OPENSSL_OPENSSLV_H
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
/*
* SECTION 1: VERSION DATA. These will change for each release
*/
/*
* Base version macros
*
* These macros express version number MAJOR.MINOR.PATCH exactly
*/
/* clang-format off */
# define OPENSSL_VERSION_MAJOR 3
/* clang-format on */
/* clang-format off */
# define OPENSSL_VERSION_MINOR 5
/* clang-format on */
/* clang-format off */
# define OPENSSL_VERSION_PATCH 7
/* clang-format on */
/*
* Additional version information
*
* These are also part of the new version scheme, but aren't part
* of the version number itself.
*/
/* Could be: #define OPENSSL_VERSION_PRE_RELEASE "-alpha.1" */
/* clang-format off */
# define OPENSSL_VERSION_PRE_RELEASE ""
/* clang-format on */
/* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+fips" */
/* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+vendor.1" */
/* clang-format off */
# define OPENSSL_VERSION_BUILD_METADATA ""
/* clang-format on */
/*
* Note: The OpenSSL Project will never define OPENSSL_VERSION_BUILD_METADATA
* to be anything but the empty string. Its use is entirely reserved for
* others
*/
/*
* Shared library version
*
* This is strictly to express ABI version, which may or may not
* be related to the API version expressed with the macros above.
* This is defined in free form.
*/
/* clang-format off */
# define OPENSSL_SHLIB_VERSION 3
/* clang-format on */
/*
* SECTION 2: USEFUL MACROS
*/
/* For checking general API compatibility when preprocessing */
#define OPENSSL_VERSION_PREREQ(maj, min) \
((OPENSSL_VERSION_MAJOR << 16) + OPENSSL_VERSION_MINOR >= ((maj) << 16) + (min))
/*
* Macros to get the version in easily digested string form, both the short
* "MAJOR.MINOR.PATCH" variant (where MAJOR, MINOR and PATCH are replaced
* with the values from the corresponding OPENSSL_VERSION_ macros) and the
* longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and
* OPENSSL_VERSION_BUILD_METADATA_STR appended.
*/
/* clang-format off */
# define OPENSSL_VERSION_STR "3.5.7"
/* clang-format on */
/* clang-format off */
# define OPENSSL_FULL_VERSION_STR "3.5.7"
/* clang-format on */
/*
* SECTION 3: ADDITIONAL METADATA
*
* These strings are defined separately to allow them to be parsable.
*/
/* clang-format off */
# define OPENSSL_RELEASE_DATE "9 Jun 2026"
/* clang-format on */
/*
* SECTION 4: BACKWARD COMPATIBILITY
*/
/* clang-format off */
# define OPENSSL_VERSION_TEXT "OpenSSL 3.5.7 9 Jun 2026"
/* clang-format on */
/* clang-format off */
/* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PP0L */
# define OPENSSL_VERSION_NUMBER \
( (OPENSSL_VERSION_MAJOR<<28) \
|(OPENSSL_VERSION_MINOR<<20) \
|(OPENSSL_VERSION_PATCH<<4) \
|0x0L )
/* clang-format on */
#ifdef __cplusplus
}
#endif
#include <openssl/macros.h>
#ifndef OPENSSL_NO_DEPRECATED_3_0
#define HEADER_OPENSSLV_H
#endif
#endif /* OPENSSL_OPENSSLV_H */
@@ -0,0 +1,370 @@
/*
* WARNING: do not edit!
* Generated by Makefile from include/openssl/pkcs12.h.in
*
* Copyright 1999-2024 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
*/
/* clang-format off */
/* clang-format on */
#ifndef OPENSSL_PKCS12_H
#define OPENSSL_PKCS12_H
#pragma once
#include <openssl/macros.h>
#ifndef OPENSSL_NO_DEPRECATED_3_0
#define HEADER_PKCS12_H
#endif
#include <openssl/bio.h>
#include <openssl/core.h>
#include <openssl/x509.h>
#include <openssl/pkcs12err.h>
#ifndef OPENSSL_NO_STDIO
#include <stdio.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
#define PKCS12_KEY_ID 1
#define PKCS12_IV_ID 2
#define PKCS12_MAC_ID 3
/* Default iteration count */
#ifndef PKCS12_DEFAULT_ITER
#define PKCS12_DEFAULT_ITER PKCS5_DEFAULT_ITER
#endif
#define PKCS12_MAC_KEY_LENGTH 20
/* The macro is expected to be used only internally. Kept for backwards compatibility. */
#define PKCS12_SALT_LEN 8
/* It's not clear if these are actually needed... */
#define PKCS12_key_gen PKCS12_key_gen_utf8
#define PKCS12_add_friendlyname PKCS12_add_friendlyname_utf8
/* MS key usage constants */
#define KEY_EX 0x10
#define KEY_SIG 0x80
typedef struct PKCS12_MAC_DATA_st PKCS12_MAC_DATA;
typedef struct PKCS12_st PKCS12;
typedef struct PKCS12_SAFEBAG_st PKCS12_SAFEBAG;
/* clang-format off */
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_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))
#define sk_PKCS12_SAFEBAG_delete(sk, i) ((PKCS12_SAFEBAG *)OPENSSL_sk_delete(ossl_check_PKCS12_SAFEBAG_sk_type(sk), (i)))
#define sk_PKCS12_SAFEBAG_delete_ptr(sk, ptr) ((PKCS12_SAFEBAG *)OPENSSL_sk_delete_ptr(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)))
#define sk_PKCS12_SAFEBAG_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr))
#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_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))
#define sk_PKCS12_SAFEBAG_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr))
#define sk_PKCS12_SAFEBAG_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr), pnum)
#define sk_PKCS12_SAFEBAG_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS12_SAFEBAG_sk_type(sk))
#define sk_PKCS12_SAFEBAG_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk))
#define sk_PKCS12_SAFEBAG_dup(sk) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_dup(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk)))
#define sk_PKCS12_SAFEBAG_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_copyfunc_type(copyfunc), ossl_check_PKCS12_SAFEBAG_freefunc_type(freefunc)))
#define sk_PKCS12_SAFEBAG_set_cmp_func(sk, cmp) ((sk_PKCS12_SAFEBAG_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_compfunc_type(cmp)))
/* clang-format on */
typedef struct pkcs12_bag_st PKCS12_BAGS;
#define PKCS12_ERROR 0
#define PKCS12_OK 1
/* Compatibility macros */
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
#define M_PKCS12_bag_type PKCS12_bag_type
#define M_PKCS12_cert_bag_type PKCS12_cert_bag_type
#define M_PKCS12_crl_bag_type PKCS12_cert_bag_type
#define PKCS12_certbag2x509 PKCS12_SAFEBAG_get1_cert
#define PKCS12_certbag2scrl PKCS12_SAFEBAG_get1_crl
#define PKCS12_bag_type PKCS12_SAFEBAG_get_nid
#define PKCS12_cert_bag_type PKCS12_SAFEBAG_get_bag_nid
#define PKCS12_x5092certbag PKCS12_SAFEBAG_create_cert
#define PKCS12_x509crl2certbag PKCS12_SAFEBAG_create_crl
#define PKCS12_MAKE_KEYBAG PKCS12_SAFEBAG_create0_p8inf
#define PKCS12_MAKE_SHKEYBAG PKCS12_SAFEBAG_create_pkcs8_encrypt
#endif
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
OSSL_DEPRECATEDIN_1_1_0 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);
int PKCS12_mac_present(const PKCS12 *p12);
void PKCS12_get0_mac(const ASN1_OCTET_STRING **pmac,
const X509_ALGOR **pmacalg,
const ASN1_OCTET_STRING **psalt,
const ASN1_INTEGER **piter,
const PKCS12 *p12);
const ASN1_TYPE *PKCS12_SAFEBAG_get0_attr(const PKCS12_SAFEBAG *bag,
int attr_nid);
const ASN1_OBJECT *PKCS12_SAFEBAG_get0_type(const PKCS12_SAFEBAG *bag);
int PKCS12_SAFEBAG_get_nid(const PKCS12_SAFEBAG *bag);
int PKCS12_SAFEBAG_get_bag_nid(const PKCS12_SAFEBAG *bag);
const ASN1_TYPE *PKCS12_SAFEBAG_get0_bag_obj(const PKCS12_SAFEBAG *bag);
const ASN1_OBJECT *PKCS12_SAFEBAG_get0_bag_type(const PKCS12_SAFEBAG *bag);
X509 *PKCS12_SAFEBAG_get1_cert_ex(const PKCS12_SAFEBAG *bag, OSSL_LIB_CTX *libctx, const char *propq);
X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag);
X509_CRL *PKCS12_SAFEBAG_get1_crl_ex(const PKCS12_SAFEBAG *bag, OSSL_LIB_CTX *libctx, const char *propq);
X509_CRL *PKCS12_SAFEBAG_get1_crl(const PKCS12_SAFEBAG *bag);
const STACK_OF(PKCS12_SAFEBAG) *
PKCS12_SAFEBAG_get0_safes(const PKCS12_SAFEBAG *bag);
const PKCS8_PRIV_KEY_INFO *PKCS12_SAFEBAG_get0_p8inf(const PKCS12_SAFEBAG *bag);
const X509_SIG *PKCS12_SAFEBAG_get0_pkcs8(const PKCS12_SAFEBAG *bag);
PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_cert(X509 *x509);
PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_crl(X509_CRL *crl);
PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_secret(int type, int vtype, const unsigned char *value, int len);
PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_p8inf(PKCS8_PRIV_KEY_INFO *p8);
PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_pkcs8(X509_SIG *p8);
PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid,
const char *pass,
int passlen,
unsigned char *salt,
int saltlen, int iter,
PKCS8_PRIV_KEY_INFO *p8inf);
PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt_ex(int pbe_nid,
const char *pass,
int passlen,
unsigned char *salt,
int saltlen, int iter,
PKCS8_PRIV_KEY_INFO *p8inf,
OSSL_LIB_CTX *ctx,
const char *propq);
PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it,
int nid1, int nid2);
PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(const X509_SIG *p8, const char *pass,
int passlen);
PKCS8_PRIV_KEY_INFO *PKCS8_decrypt_ex(const X509_SIG *p8, const char *pass,
int passlen, OSSL_LIB_CTX *ctx,
const char *propq);
PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(const PKCS12_SAFEBAG *bag,
const char *pass, int passlen);
PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey_ex(const PKCS12_SAFEBAG *bag,
const char *pass, int passlen,
OSSL_LIB_CTX *ctx,
const char *propq);
X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher,
const char *pass, int passlen, unsigned char *salt,
int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8);
X509_SIG *PKCS8_encrypt_ex(int pbe_nid, const EVP_CIPHER *cipher,
const char *pass, int passlen, unsigned char *salt,
int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8,
OSSL_LIB_CTX *ctx, const char *propq);
X509_SIG *PKCS8_set0_pbe(const char *pass, int passlen,
PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe);
X509_SIG *PKCS8_set0_pbe_ex(const char *pass, int passlen,
PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe,
OSSL_LIB_CTX *ctx, const char *propq);
PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk);
STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7);
PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen,
unsigned char *salt, int saltlen, int iter,
STACK_OF(PKCS12_SAFEBAG) *bags);
PKCS7 *PKCS12_pack_p7encdata_ex(int pbe_nid, const char *pass, int passlen,
unsigned char *salt, int saltlen, int iter,
STACK_OF(PKCS12_SAFEBAG) *bags,
OSSL_LIB_CTX *ctx, const char *propq);
STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass,
int passlen);
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 namelen);
int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name,
int namelen);
int PKCS12_add_friendlyname_utf8(PKCS12_SAFEBAG *bag, const char *name,
int namelen);
int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name,
int namelen);
int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag,
const unsigned char *name, int namelen);
int PKCS12_add1_attr_by_NID(PKCS12_SAFEBAG *bag, int nid, int type,
const unsigned char *bytes, int len);
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,
int attr_nid);
char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag);
const STACK_OF(X509_ATTRIBUTE) *
PKCS12_SAFEBAG_get0_attrs(const PKCS12_SAFEBAG *bag);
void PKCS12_SAFEBAG_set0_attrs(PKCS12_SAFEBAG *bag, STACK_OF(X509_ATTRIBUTE) *attrs);
unsigned char *PKCS12_pbe_crypt(const X509_ALGOR *algor,
const char *pass, int passlen,
const unsigned char *in, int inlen,
unsigned char **data, int *datalen,
int en_de);
unsigned char *PKCS12_pbe_crypt_ex(const X509_ALGOR *algor,
const char *pass, int passlen,
const unsigned char *in, int inlen,
unsigned char **data, int *datalen,
int en_de, OSSL_LIB_CTX *libctx,
const char *propq);
void *PKCS12_item_decrypt_d2i(const X509_ALGOR *algor, const ASN1_ITEM *it,
const char *pass, int passlen,
const ASN1_OCTET_STRING *oct, int zbuf);
void *PKCS12_item_decrypt_d2i_ex(const X509_ALGOR *algor, const ASN1_ITEM *it,
const char *pass, int passlen,
const ASN1_OCTET_STRING *oct, int zbuf,
OSSL_LIB_CTX *libctx,
const char *propq);
ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor,
const ASN1_ITEM *it,
const char *pass, int passlen,
void *obj, int zbuf);
ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt_ex(X509_ALGOR *algor,
const ASN1_ITEM *it,
const char *pass, int passlen,
void *obj, int zbuf,
OSSL_LIB_CTX *ctx,
const char *propq);
PKCS12 *PKCS12_init(int mode);
PKCS12 *PKCS12_init_ex(int mode, OSSL_LIB_CTX *ctx, const char *propq);
int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt,
int saltlen, int id, int iter, int n,
unsigned char *out, const EVP_MD *md_type);
int PKCS12_key_gen_asc_ex(const char *pass, int passlen, unsigned char *salt,
int saltlen, int id, int iter, int n,
unsigned char *out, const EVP_MD *md_type,
OSSL_LIB_CTX *ctx, const char *propq);
int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt,
int saltlen, int id, int iter, int n,
unsigned char *out, const EVP_MD *md_type);
int PKCS12_key_gen_uni_ex(unsigned char *pass, int passlen, unsigned char *salt,
int saltlen, int id, int iter, int n,
unsigned char *out, const EVP_MD *md_type,
OSSL_LIB_CTX *ctx, const char *propq);
int PKCS12_key_gen_utf8(const char *pass, int passlen, unsigned char *salt,
int saltlen, int id, int iter, int n,
unsigned char *out, const EVP_MD *md_type);
int PKCS12_key_gen_utf8_ex(const char *pass, int passlen, unsigned char *salt,
int saltlen, int id, int iter, int n,
unsigned char *out, const EVP_MD *md_type,
OSSL_LIB_CTX *ctx, const char *propq);
int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
ASN1_TYPE *param, const EVP_CIPHER *cipher,
const EVP_MD *md_type, int en_de);
int PKCS12_PBE_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
ASN1_TYPE *param, const EVP_CIPHER *cipher,
const EVP_MD *md_type, int en_de,
OSSL_LIB_CTX *libctx, const char *propq);
int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen,
unsigned char *mac, unsigned int *maclen);
int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen);
int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen,
unsigned char *salt, int saltlen, int iter,
const EVP_MD *md_type);
int PKCS12_set_pbmac1_pbkdf2(PKCS12 *p12, const char *pass, int passlen,
unsigned char *salt, int saltlen, int iter,
const EVP_MD *md_type, const char *prf_md_name);
int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt,
int saltlen, const EVP_MD *md_type);
unsigned char *OPENSSL_asc2uni(const char *asc, int asclen,
unsigned char **uni, int *unilen);
char *OPENSSL_uni2asc(const unsigned char *uni, int unilen);
unsigned char *OPENSSL_utf82uni(const char *asc, int asclen,
unsigned char **uni, int *unilen);
char *OPENSSL_uni2utf8(const unsigned char *uni, int unilen);
DECLARE_ASN1_FUNCTIONS(PKCS12)
DECLARE_ASN1_FUNCTIONS(PKCS12_MAC_DATA)
DECLARE_ASN1_FUNCTIONS(PKCS12_SAFEBAG)
DECLARE_ASN1_FUNCTIONS(PKCS12_BAGS)
DECLARE_ASN1_ITEM(PKCS12_SAFEBAGS)
DECLARE_ASN1_ITEM(PKCS12_AUTHSAFES)
void PKCS12_PBE_add(void);
int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert,
STACK_OF(X509) **ca);
typedef int PKCS12_create_cb(PKCS12_SAFEBAG *bag, void *cbarg);
PKCS12 *PKCS12_create(const char *pass, const char *name, EVP_PKEY *pkey,
X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert,
int iter, int mac_iter, int keytype);
PKCS12 *PKCS12_create_ex(const char *pass, const char *name, EVP_PKEY *pkey,
X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert,
int iter, int mac_iter, int keytype,
OSSL_LIB_CTX *ctx, const char *propq);
PKCS12 *PKCS12_create_ex2(const char *pass, const char *name, EVP_PKEY *pkey,
X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert,
int iter, int mac_iter, int keytype,
OSSL_LIB_CTX *ctx, const char *propq,
PKCS12_create_cb *cb, void *cbarg);
PKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert);
PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags,
EVP_PKEY *key, int key_usage, int iter,
int key_nid, const char *pass);
PKCS12_SAFEBAG *PKCS12_add_key_ex(STACK_OF(PKCS12_SAFEBAG) **pbags,
EVP_PKEY *key, int key_usage, int iter,
int key_nid, const char *pass,
OSSL_LIB_CTX *ctx, const char *propq);
PKCS12_SAFEBAG *PKCS12_add_secret(STACK_OF(PKCS12_SAFEBAG) **pbags,
int nid_type, const unsigned char *value, int len);
int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags,
int safe_nid, int iter, const char *pass);
int PKCS12_add_safe_ex(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags,
int safe_nid, int iter, const char *pass,
OSSL_LIB_CTX *ctx, const char *propq);
PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid);
PKCS12 *PKCS12_add_safes_ex(STACK_OF(PKCS7) *safes, int p7_nid,
OSSL_LIB_CTX *ctx, const char *propq);
int i2d_PKCS12_bio(BIO *bp, const PKCS12 *p12);
#ifndef OPENSSL_NO_STDIO
int i2d_PKCS12_fp(FILE *fp, const PKCS12 *p12);
#endif
PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12);
#ifndef OPENSSL_NO_STDIO
PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12);
#endif
int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,435 @@
/*
* WARNING: do not edit!
* Generated by Makefile from include/openssl/pkcs7.h.in
*
* Copyright 1995-2021 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
*/
/* clang-format off */
/* clang-format on */
#ifndef OPENSSL_PKCS7_H
#define OPENSSL_PKCS7_H
#pragma once
#include <openssl/macros.h>
#ifndef OPENSSL_NO_DEPRECATED_3_0
#define HEADER_PKCS7_H
#endif
#include <openssl/asn1.h>
#include <openssl/bio.h>
#include <openssl/e_os2.h>
#include <openssl/symhacks.h>
#include <openssl/types.h>
#include <openssl/pkcs7err.h>
#ifndef OPENSSL_NO_STDIO
#include <stdio.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*-
Encryption_ID DES-CBC
Digest_ID MD5
Digest_Encryption_ID rsaEncryption
Key_Encryption_ID rsaEncryption
*/
typedef struct PKCS7_CTX_st {
OSSL_LIB_CTX *libctx;
char *propq;
} PKCS7_CTX;
typedef struct pkcs7_issuer_and_serial_st {
X509_NAME *issuer;
ASN1_INTEGER *serial;
} PKCS7_ISSUER_AND_SERIAL;
typedef struct pkcs7_signer_info_st {
ASN1_INTEGER *version; /* version 1 */
PKCS7_ISSUER_AND_SERIAL *issuer_and_serial;
X509_ALGOR *digest_alg;
STACK_OF(X509_ATTRIBUTE) *auth_attr; /* [ 0 ] */
X509_ALGOR *digest_enc_alg; /* confusing name, actually used for signing */
ASN1_OCTET_STRING *enc_digest; /* confusing name, actually signature */
STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */
/* The private key to sign with */
EVP_PKEY *pkey;
const PKCS7_CTX *ctx;
} PKCS7_SIGNER_INFO;
/* clang-format off */
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_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))
#define sk_PKCS7_SIGNER_INFO_delete(sk, i) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_delete(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), (i)))
#define sk_PKCS7_SIGNER_INFO_delete_ptr(sk, ptr) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_delete_ptr(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)))
#define sk_PKCS7_SIGNER_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr))
#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_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))
#define sk_PKCS7_SIGNER_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr))
#define sk_PKCS7_SIGNER_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr), pnum)
#define sk_PKCS7_SIGNER_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk))
#define sk_PKCS7_SIGNER_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk))
#define sk_PKCS7_SIGNER_INFO_dup(sk) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_dup(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk)))
#define sk_PKCS7_SIGNER_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_copyfunc_type(copyfunc), ossl_check_PKCS7_SIGNER_INFO_freefunc_type(freefunc)))
#define sk_PKCS7_SIGNER_INFO_set_cmp_func(sk, cmp) ((sk_PKCS7_SIGNER_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_compfunc_type(cmp)))
/* clang-format on */
typedef struct pkcs7_recip_info_st {
ASN1_INTEGER *version; /* version 0 */
PKCS7_ISSUER_AND_SERIAL *issuer_and_serial;
X509_ALGOR *key_enc_algor;
ASN1_OCTET_STRING *enc_key;
X509 *cert; /* get the pub-key from this */
const PKCS7_CTX *ctx;
} PKCS7_RECIP_INFO;
/* clang-format off */
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_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))
#define sk_PKCS7_RECIP_INFO_delete(sk, i) ((PKCS7_RECIP_INFO *)OPENSSL_sk_delete(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), (i)))
#define sk_PKCS7_RECIP_INFO_delete_ptr(sk, ptr) ((PKCS7_RECIP_INFO *)OPENSSL_sk_delete_ptr(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)))
#define sk_PKCS7_RECIP_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr))
#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_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))
#define sk_PKCS7_RECIP_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr))
#define sk_PKCS7_RECIP_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr), pnum)
#define sk_PKCS7_RECIP_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS7_RECIP_INFO_sk_type(sk))
#define sk_PKCS7_RECIP_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk))
#define sk_PKCS7_RECIP_INFO_dup(sk) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_dup(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk)))
#define sk_PKCS7_RECIP_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_copyfunc_type(copyfunc), ossl_check_PKCS7_RECIP_INFO_freefunc_type(freefunc)))
#define sk_PKCS7_RECIP_INFO_set_cmp_func(sk, cmp) ((sk_PKCS7_RECIP_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_compfunc_type(cmp)))
/* clang-format on */
typedef struct pkcs7_signed_st {
ASN1_INTEGER *version; /* version 1 */
STACK_OF(X509_ALGOR) *md_algs; /* md used */
STACK_OF(X509) *cert; /* [ 0 ] */ /* name should be 'certificates' */
STACK_OF(X509_CRL) *crl; /* [ 1 ] */ /* name should be 'crls' */
STACK_OF(PKCS7_SIGNER_INFO) *signer_info;
struct pkcs7_st *contents;
} PKCS7_SIGNED;
/*
* The above structure is very very similar to PKCS7_SIGN_ENVELOPE. How about
* merging the two
*/
typedef struct pkcs7_enc_content_st {
ASN1_OBJECT *content_type;
X509_ALGOR *algorithm;
ASN1_OCTET_STRING *enc_data; /* [ 0 ] */
const EVP_CIPHER *cipher;
const PKCS7_CTX *ctx;
} PKCS7_ENC_CONTENT;
typedef struct pkcs7_enveloped_st {
ASN1_INTEGER *version; /* version 0 */
STACK_OF(PKCS7_RECIP_INFO) *recipientinfo;
PKCS7_ENC_CONTENT *enc_data;
} PKCS7_ENVELOPE;
typedef struct pkcs7_signedandenveloped_st {
ASN1_INTEGER *version; /* version 1 */
STACK_OF(X509_ALGOR) *md_algs; /* md used */
STACK_OF(X509) *cert; /* [ 0 ] */ /* name should be 'certificates' */
STACK_OF(X509_CRL) *crl; /* [ 1 ] */ /* name should be 'crls' */
STACK_OF(PKCS7_SIGNER_INFO) *signer_info;
PKCS7_ENC_CONTENT *enc_data;
STACK_OF(PKCS7_RECIP_INFO) *recipientinfo;
} PKCS7_SIGN_ENVELOPE;
typedef struct pkcs7_digest_st {
ASN1_INTEGER *version; /* version 0 */
X509_ALGOR *md; /* md used */
struct pkcs7_st *contents;
ASN1_OCTET_STRING *digest;
} PKCS7_DIGEST;
typedef struct pkcs7_encrypted_st {
ASN1_INTEGER *version; /* version 0 */
PKCS7_ENC_CONTENT *enc_data;
} PKCS7_ENCRYPT;
typedef struct pkcs7_st {
/*
* The following is non NULL if it contains ASN1 encoding of this
* structure
*/
unsigned char *asn1;
long length;
#define PKCS7_S_HEADER 0
#define PKCS7_S_BODY 1
#define PKCS7_S_TAIL 2
int state; /* used during processing */
int detached;
ASN1_OBJECT *type;
/* content as defined by the type */
/*
* all encryption/message digests are applied to the 'contents', leaving
* out the 'type' field.
*/
union {
char *ptr;
/* NID_pkcs7_data */
ASN1_OCTET_STRING *data;
/* NID_pkcs7_signed */
PKCS7_SIGNED *sign; /* field name 'signed' would clash with C keyword */
/* NID_pkcs7_enveloped */
PKCS7_ENVELOPE *enveloped;
/* NID_pkcs7_signedAndEnveloped */
PKCS7_SIGN_ENVELOPE *signed_and_enveloped;
/* NID_pkcs7_digest */
PKCS7_DIGEST *digest;
/* NID_pkcs7_encrypted */
PKCS7_ENCRYPT *encrypted;
/* Anything else */
ASN1_TYPE *other;
} d;
PKCS7_CTX ctx;
} PKCS7;
/* clang-format off */
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_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))
#define sk_PKCS7_delete(sk, i) ((PKCS7 *)OPENSSL_sk_delete(ossl_check_PKCS7_sk_type(sk), (i)))
#define sk_PKCS7_delete_ptr(sk, ptr) ((PKCS7 *)OPENSSL_sk_delete_ptr(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)))
#define sk_PKCS7_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr))
#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_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))
#define sk_PKCS7_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr))
#define sk_PKCS7_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr), pnum)
#define sk_PKCS7_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS7_sk_type(sk))
#define sk_PKCS7_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS7_sk_type(sk))
#define sk_PKCS7_dup(sk) ((STACK_OF(PKCS7) *)OPENSSL_sk_dup(ossl_check_const_PKCS7_sk_type(sk)))
#define sk_PKCS7_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS7) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS7_sk_type(sk), ossl_check_PKCS7_copyfunc_type(copyfunc), ossl_check_PKCS7_freefunc_type(freefunc)))
#define sk_PKCS7_set_cmp_func(sk, cmp) ((sk_PKCS7_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_compfunc_type(cmp)))
/* clang-format on */
#define PKCS7_OP_SET_DETACHED_SIGNATURE 1
#define PKCS7_OP_GET_DETACHED_SIGNATURE 2
#define PKCS7_get_signed_attributes(si) ((si)->auth_attr)
#define PKCS7_get_attributes(si) ((si)->unauth_attr)
#define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed)
#define PKCS7_type_is_encrypted(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted)
#define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped)
#define PKCS7_type_is_signedAndEnveloped(a) \
(OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped)
#define PKCS7_type_is_data(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_data)
#define PKCS7_type_is_digest(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_digest)
#define PKCS7_set_detached(p, v) \
PKCS7_ctrl(p, PKCS7_OP_SET_DETACHED_SIGNATURE, v, NULL)
#define PKCS7_get_detached(p) \
PKCS7_ctrl(p, PKCS7_OP_GET_DETACHED_SIGNATURE, 0, NULL)
#define PKCS7_is_detached(p7) (PKCS7_type_is_signed(p7) && PKCS7_get_detached(p7))
/* S/MIME related flags */
#define PKCS7_TEXT 0x1
#define PKCS7_NOCERTS 0x2
#define PKCS7_NOSIGS 0x4
#define PKCS7_NOCHAIN 0x8
#define PKCS7_NOINTERN 0x10
#define PKCS7_NOVERIFY 0x20
#define PKCS7_DETACHED 0x40
#define PKCS7_BINARY 0x80
#define PKCS7_NOATTR 0x100
#define PKCS7_NOSMIMECAP 0x200
#define PKCS7_NOOLDMIMETYPE 0x400
#define PKCS7_CRLFEOL 0x800
#define PKCS7_STREAM 0x1000
#define PKCS7_NOCRL 0x2000
#define PKCS7_PARTIAL 0x4000
#define PKCS7_REUSE_DIGEST 0x8000
#define PKCS7_NO_DUAL_CONTENT 0x10000
/* Flags: for compatibility with older code */
#define SMIME_TEXT PKCS7_TEXT
#define SMIME_NOCERTS PKCS7_NOCERTS
#define SMIME_NOSIGS PKCS7_NOSIGS
#define SMIME_NOCHAIN PKCS7_NOCHAIN
#define SMIME_NOINTERN PKCS7_NOINTERN
#define SMIME_NOVERIFY PKCS7_NOVERIFY
#define SMIME_DETACHED PKCS7_DETACHED
#define SMIME_BINARY PKCS7_BINARY
#define SMIME_NOATTR PKCS7_NOATTR
/* CRLF ASCII canonicalisation */
#define SMIME_ASCIICRLF 0x80000
DECLARE_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SERIAL)
int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data,
const EVP_MD *type, unsigned char *md,
unsigned int *len);
#ifndef OPENSSL_NO_STDIO
PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7);
int i2d_PKCS7_fp(FILE *fp, const PKCS7 *p7);
#endif
DECLARE_ASN1_DUP_FUNCTION(PKCS7)
PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7);
int i2d_PKCS7_bio(BIO *bp, const PKCS7 *p7);
int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags);
int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags);
DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNER_INFO)
DECLARE_ASN1_FUNCTIONS(PKCS7_RECIP_INFO)
DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNED)
DECLARE_ASN1_FUNCTIONS(PKCS7_ENC_CONTENT)
DECLARE_ASN1_FUNCTIONS(PKCS7_ENVELOPE)
DECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE)
DECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST)
DECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT)
DECLARE_ASN1_FUNCTIONS(PKCS7)
PKCS7 *PKCS7_new_ex(OSSL_LIB_CTX *libctx, const char *propq);
DECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN)
DECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY)
DECLARE_ASN1_NDEF_FUNCTION(PKCS7)
DECLARE_ASN1_PRINT_FUNCTION(PKCS7)
long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg);
int PKCS7_type_is_other(PKCS7 *p7);
int PKCS7_set_type(PKCS7 *p7, int type);
int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other);
int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data);
int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey,
const EVP_MD *dgst);
int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si);
int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i);
int PKCS7_add_certificate(PKCS7 *p7, X509 *cert);
int PKCS7_add_crl(PKCS7 *p7, X509_CRL *crl);
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);
BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio);
int PKCS7_dataFinal(PKCS7 *p7, BIO *bio);
BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert);
PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509,
EVP_PKEY *pkey, const EVP_MD *dgst);
X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si);
int PKCS7_set_digest(PKCS7 *p7, const EVP_MD *md);
STACK_OF(PKCS7_SIGNER_INFO) *PKCS7_get_signer_info(PKCS7 *p7);
PKCS7_RECIP_INFO *PKCS7_add_recipient(PKCS7 *p7, X509 *x509);
void PKCS7_SIGNER_INFO_get0_algs(PKCS7_SIGNER_INFO *si, EVP_PKEY **pk,
X509_ALGOR **pdig, X509_ALGOR **psig);
void PKCS7_RECIP_INFO_get0_alg(PKCS7_RECIP_INFO *ri, X509_ALGOR **penc);
int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri);
int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509);
int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher);
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);
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);
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,
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_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,
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,
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,
int flags);
int PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si,
STACK_OF(X509_ALGOR) *cap);
STACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si);
int PKCS7_simple_smimecap(STACK_OF(X509_ALGOR) *sk, int nid, int arg);
int PKCS7_add_attrib_content_type(PKCS7_SIGNER_INFO *si, ASN1_OBJECT *coid);
int PKCS7_add0_attrib_signing_time(PKCS7_SIGNER_INFO *si, ASN1_TIME *t);
int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si,
const unsigned char *md, int mdlen);
int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags);
PKCS7 *SMIME_read_PKCS7_ex(BIO *bio, BIO **bcont, PKCS7 **p7);
PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont);
BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,303 @@
/*
* WARNING: do not edit!
* Generated by Makefile from include/openssl/safestack.h.in
*
* Copyright 1999-2021 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
*/
/* clang-format off */
/* clang-format on */
#ifndef OPENSSL_SAFESTACK_H
#define OPENSSL_SAFESTACK_H
#pragma once
#include <openssl/macros.h>
#ifndef OPENSSL_NO_DEPRECATED_3_0
#define HEADER_SAFESTACK_H
#endif
#include <openssl/stack.h>
#include <openssl/e_os2.h>
#ifdef __cplusplus
extern "C" {
#endif
#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(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 int sk_##t1##_num(const STACK_OF(t1) *sk) \
{ \
return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \
} \
static ossl_unused ossl_inline t2 *sk_##t1##_value(const STACK_OF(t1) *sk, int idx) \
{ \
return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx); \
} \
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); \
} \
static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_null(void) \
{ \
return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \
} \
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); \
} \
static ossl_unused ossl_inline int sk_##t1##_reserve(STACK_OF(t1) *sk, int n) \
{ \
return OPENSSL_sk_reserve((OPENSSL_STACK *)sk, n); \
} \
static ossl_unused ossl_inline void sk_##t1##_free(STACK_OF(t1) *sk) \
{ \
OPENSSL_sk_free((OPENSSL_STACK *)sk); \
} \
static ossl_unused ossl_inline void sk_##t1##_zero(STACK_OF(t1) *sk) \
{ \
OPENSSL_sk_zero((OPENSSL_STACK *)sk); \
} \
static ossl_unused ossl_inline t2 *sk_##t1##_delete(STACK_OF(t1) *sk, int i) \
{ \
return (t2 *)OPENSSL_sk_delete((OPENSSL_STACK *)sk, i); \
} \
static ossl_unused ossl_inline t2 *sk_##t1##_delete_ptr(STACK_OF(t1) *sk, t2 *ptr) \
{ \
return (t2 *)OPENSSL_sk_delete_ptr((OPENSSL_STACK *)sk, \
(const void *)ptr); \
} \
static ossl_unused ossl_inline int sk_##t1##_push(STACK_OF(t1) *sk, t2 *ptr) \
{ \
return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr); \
} \
static ossl_unused ossl_inline int sk_##t1##_unshift(STACK_OF(t1) *sk, t2 *ptr) \
{ \
return OPENSSL_sk_unshift((OPENSSL_STACK *)sk, (const void *)ptr); \
} \
static ossl_unused ossl_inline t2 *sk_##t1##_pop(STACK_OF(t1) *sk) \
{ \
return (t2 *)OPENSSL_sk_pop((OPENSSL_STACK *)sk); \
} \
static ossl_unused ossl_inline t2 *sk_##t1##_shift(STACK_OF(t1) *sk) \
{ \
return (t2 *)OPENSSL_sk_shift((OPENSSL_STACK *)sk); \
} \
static ossl_unused ossl_inline void sk_##t1##_pop_free(STACK_OF(t1) *sk, sk_##t1##_freefunc freefunc) \
{ \
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) \
{ \
return OPENSSL_sk_insert((OPENSSL_STACK *)sk, (const void *)ptr, idx); \
} \
static ossl_unused ossl_inline t2 *sk_##t1##_set(STACK_OF(t1) *sk, int idx, t2 *ptr) \
{ \
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) \
{ \
return OPENSSL_sk_find((OPENSSL_STACK *)sk, (const void *)ptr); \
} \
static ossl_unused ossl_inline int sk_##t1##_find_ex(STACK_OF(t1) *sk, t2 *ptr) \
{ \
return OPENSSL_sk_find_ex((OPENSSL_STACK *)sk, (const void *)ptr); \
} \
static ossl_unused ossl_inline int sk_##t1##_find_all(STACK_OF(t1) *sk, t2 *ptr, int *pnum) \
{ \
return OPENSSL_sk_find_all((OPENSSL_STACK *)sk, (const void *)ptr, pnum); \
} \
static ossl_unused ossl_inline void sk_##t1##_sort(STACK_OF(t1) *sk) \
{ \
OPENSSL_sk_sort((OPENSSL_STACK *)sk); \
} \
static ossl_unused ossl_inline int sk_##t1##_is_sorted(const STACK_OF(t1) *sk) \
{ \
return OPENSSL_sk_is_sorted((const OPENSSL_STACK *)sk); \
} \
static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_dup(const STACK_OF(t1) *sk) \
{ \
return (STACK_OF(t1) *)OPENSSL_sk_dup((const OPENSSL_STACK *)sk); \
} \
static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_deep_copy(const STACK_OF(t1) *sk, \
sk_##t1##_copyfunc copyfunc, \
sk_##t1##_freefunc freefunc) \
{ \
return (STACK_OF(t1) *)OPENSSL_sk_deep_copy((const OPENSSL_STACK *)sk, \
(OPENSSL_sk_copyfunc)copyfunc, \
(OPENSSL_sk_freefunc)freefunc); \
} \
static ossl_unused ossl_inline sk_##t1##_compfunc sk_##t1##_set_cmp_func(STACK_OF(t1) *sk, sk_##t1##_compfunc compare) \
{ \
return (sk_##t1##_compfunc)OPENSSL_sk_set_cmp_func((OPENSSL_STACK *)sk, (OPENSSL_sk_compfunc)compare); \
}
#define DEFINE_STACK_OF(t) SKM_DEFINE_STACK_OF(t, t, t)
#define DEFINE_STACK_OF_CONST(t) SKM_DEFINE_STACK_OF(t, const t, t)
#define DEFINE_SPECIAL_STACK_OF(t1, t2) SKM_DEFINE_STACK_OF(t1, t2, t2)
#define DEFINE_SPECIAL_STACK_OF_CONST(t1, t2) \
SKM_DEFINE_STACK_OF(t1, const t2, t2)
/*-
* Strings are special: normally an lhash entry will point to a single
* (somewhat) mutable object. In the case of strings:
*
* a) Instead of a single char, there is an array of chars, NUL-terminated.
* b) The string may have be immutable.
*
* So, they need their own declarations. Especially important for
* type-checking tools, such as Deputy.
*
* In practice, however, it appears to be hard to have a const
* string. For now, I'm settling for dealing with the fact it is a
* string at all.
*/
typedef char *OPENSSL_STRING;
typedef const char *OPENSSL_CSTRING;
/*-
* Confusingly, LHASH_OF(STRING) deals with char ** throughout, but
* STACK_OF(STRING) is really more like STACK_OF(char), only, as mentioned
* above, instead of a single char each entry is a NUL-terminated array of
* chars. So, we have to implement STRING specially for STACK_OF. This is
* dealt with in the autogenerated macros below.
*/
/* clang-format off */
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_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))
#define sk_OPENSSL_STRING_delete(sk, i) ((char *)OPENSSL_sk_delete(ossl_check_OPENSSL_STRING_sk_type(sk), (i)))
#define sk_OPENSSL_STRING_delete_ptr(sk, ptr) ((char *)OPENSSL_sk_delete_ptr(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)))
#define sk_OPENSSL_STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr))
#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_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))
#define sk_OPENSSL_STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr))
#define sk_OPENSSL_STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr), pnum)
#define sk_OPENSSL_STRING_sort(sk) OPENSSL_sk_sort(ossl_check_OPENSSL_STRING_sk_type(sk))
#define sk_OPENSSL_STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OPENSSL_STRING_sk_type(sk))
#define sk_OPENSSL_STRING_dup(sk) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_dup(ossl_check_const_OPENSSL_STRING_sk_type(sk)))
#define sk_OPENSSL_STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_copyfunc_type(copyfunc), ossl_check_OPENSSL_STRING_freefunc_type(freefunc)))
#define sk_OPENSSL_STRING_set_cmp_func(sk, cmp) ((sk_OPENSSL_STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_compfunc_type(cmp)))
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_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))
#define sk_OPENSSL_CSTRING_delete(sk, i) ((const char *)OPENSSL_sk_delete(ossl_check_OPENSSL_CSTRING_sk_type(sk), (i)))
#define sk_OPENSSL_CSTRING_delete_ptr(sk, ptr) ((const char *)OPENSSL_sk_delete_ptr(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)))
#define sk_OPENSSL_CSTRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr))
#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_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))
#define sk_OPENSSL_CSTRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr))
#define sk_OPENSSL_CSTRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr), pnum)
#define sk_OPENSSL_CSTRING_sort(sk) OPENSSL_sk_sort(ossl_check_OPENSSL_CSTRING_sk_type(sk))
#define sk_OPENSSL_CSTRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OPENSSL_CSTRING_sk_type(sk))
#define sk_OPENSSL_CSTRING_dup(sk) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_dup(ossl_check_const_OPENSSL_CSTRING_sk_type(sk)))
#define sk_OPENSSL_CSTRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_deep_copy(ossl_check_const_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_copyfunc_type(copyfunc), ossl_check_OPENSSL_CSTRING_freefunc_type(freefunc)))
#define sk_OPENSSL_CSTRING_set_cmp_func(sk, cmp) ((sk_OPENSSL_CSTRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_compfunc_type(cmp)))
/* clang-format on */
#if !defined(OPENSSL_NO_DEPRECATED_3_0)
/*
* This is not used by OpenSSL. A block of bytes, NOT nul-terminated.
* These should also be distinguished from "normal" stacks.
*/
typedef void *OPENSSL_BLOCK;
/* clang-format off */
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_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))
#define sk_OPENSSL_BLOCK_delete(sk, i) ((void *)OPENSSL_sk_delete(ossl_check_OPENSSL_BLOCK_sk_type(sk), (i)))
#define sk_OPENSSL_BLOCK_delete_ptr(sk, ptr) ((void *)OPENSSL_sk_delete_ptr(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)))
#define sk_OPENSSL_BLOCK_push(sk, ptr) OPENSSL_sk_push(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr))
#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_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))
#define sk_OPENSSL_BLOCK_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr))
#define sk_OPENSSL_BLOCK_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr), pnum)
#define sk_OPENSSL_BLOCK_sort(sk) OPENSSL_sk_sort(ossl_check_OPENSSL_BLOCK_sk_type(sk))
#define sk_OPENSSL_BLOCK_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OPENSSL_BLOCK_sk_type(sk))
#define sk_OPENSSL_BLOCK_dup(sk) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_dup(ossl_check_const_OPENSSL_BLOCK_sk_type(sk)))
#define sk_OPENSSL_BLOCK_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_deep_copy(ossl_check_const_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_copyfunc_type(copyfunc), ossl_check_OPENSSL_BLOCK_freefunc_type(freefunc)))
#define sk_OPENSSL_BLOCK_set_cmp_func(sk, cmp) ((sk_OPENSSL_BLOCK_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_compfunc_type(cmp)))
/* clang-format on */
#endif
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,291 @@
/*
* WARNING: do not edit!
* Generated by Makefile from include/openssl/srp.h.in
*
* Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved.
* Copyright (c) 2004, EdelKey Project. 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
*
* Originally written by Christophe Renou and Peter Sylvester,
* for the EdelKey project.
*/
/* clang-format off */
/* clang-format on */
#ifndef OPENSSL_SRP_H
#define OPENSSL_SRP_H
#pragma once
#include <openssl/macros.h>
#ifndef OPENSSL_NO_DEPRECATED_3_0
#define HEADER_SRP_H
#endif
#include <openssl/opensslconf.h>
#ifndef OPENSSL_NO_SRP
#include <stdio.h>
#include <string.h>
#include <openssl/safestack.h>
#include <openssl/bn.h>
#include <openssl/crypto.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifndef OPENSSL_NO_DEPRECATED_3_0
typedef struct SRP_gN_cache_st {
char *b64_bn;
BIGNUM *bn;
} SRP_gN_cache;
/* clang-format off */
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_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))
#define sk_SRP_gN_cache_delete(sk, i) ((SRP_gN_cache *)OPENSSL_sk_delete(ossl_check_SRP_gN_cache_sk_type(sk), (i)))
#define sk_SRP_gN_cache_delete_ptr(sk, ptr) ((SRP_gN_cache *)OPENSSL_sk_delete_ptr(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)))
#define sk_SRP_gN_cache_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr))
#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_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))
#define sk_SRP_gN_cache_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr))
#define sk_SRP_gN_cache_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr), pnum)
#define sk_SRP_gN_cache_sort(sk) OPENSSL_sk_sort(ossl_check_SRP_gN_cache_sk_type(sk))
#define sk_SRP_gN_cache_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRP_gN_cache_sk_type(sk))
#define sk_SRP_gN_cache_dup(sk) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_dup(ossl_check_const_SRP_gN_cache_sk_type(sk)))
#define sk_SRP_gN_cache_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_deep_copy(ossl_check_const_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_copyfunc_type(copyfunc), ossl_check_SRP_gN_cache_freefunc_type(freefunc)))
#define sk_SRP_gN_cache_set_cmp_func(sk, cmp) ((sk_SRP_gN_cache_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_compfunc_type(cmp)))
/* clang-format on */
typedef struct SRP_user_pwd_st {
/* Owned by us. */
char *id;
BIGNUM *s;
BIGNUM *v;
/* Not owned by us. */
const BIGNUM *g;
const BIGNUM *N;
/* Owned by us. */
char *info;
} SRP_user_pwd;
/* clang-format off */
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_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))
#define sk_SRP_user_pwd_delete(sk, i) ((SRP_user_pwd *)OPENSSL_sk_delete(ossl_check_SRP_user_pwd_sk_type(sk), (i)))
#define sk_SRP_user_pwd_delete_ptr(sk, ptr) ((SRP_user_pwd *)OPENSSL_sk_delete_ptr(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)))
#define sk_SRP_user_pwd_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr))
#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_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))
#define sk_SRP_user_pwd_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr))
#define sk_SRP_user_pwd_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr), pnum)
#define sk_SRP_user_pwd_sort(sk) OPENSSL_sk_sort(ossl_check_SRP_user_pwd_sk_type(sk))
#define sk_SRP_user_pwd_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRP_user_pwd_sk_type(sk))
#define sk_SRP_user_pwd_dup(sk) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_dup(ossl_check_const_SRP_user_pwd_sk_type(sk)))
#define sk_SRP_user_pwd_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_deep_copy(ossl_check_const_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_copyfunc_type(copyfunc), ossl_check_SRP_user_pwd_freefunc_type(freefunc)))
#define sk_SRP_user_pwd_set_cmp_func(sk, cmp) ((sk_SRP_user_pwd_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_compfunc_type(cmp)))
/* clang-format on */
OSSL_DEPRECATEDIN_3_0
SRP_user_pwd *SRP_user_pwd_new(void);
OSSL_DEPRECATEDIN_3_0
void SRP_user_pwd_free(SRP_user_pwd *user_pwd);
OSSL_DEPRECATEDIN_3_0
void SRP_user_pwd_set_gN(SRP_user_pwd *user_pwd, const BIGNUM *g,
const BIGNUM *N);
OSSL_DEPRECATEDIN_3_0
int SRP_user_pwd_set1_ids(SRP_user_pwd *user_pwd, const char *id,
const char *info);
OSSL_DEPRECATEDIN_3_0
int SRP_user_pwd_set0_sv(SRP_user_pwd *user_pwd, BIGNUM *s, BIGNUM *v);
typedef struct SRP_VBASE_st {
STACK_OF(SRP_user_pwd) *users_pwd;
STACK_OF(SRP_gN_cache) *gN_cache;
/* to simulate a user */
char *seed_key;
const BIGNUM *default_g;
const BIGNUM *default_N;
} SRP_VBASE;
/*
* Internal structure storing N and g pair
*/
typedef struct SRP_gN_st {
char *id;
const BIGNUM *g;
const BIGNUM *N;
} SRP_gN;
/* clang-format off */
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_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))
#define sk_SRP_gN_delete(sk, i) ((SRP_gN *)OPENSSL_sk_delete(ossl_check_SRP_gN_sk_type(sk), (i)))
#define sk_SRP_gN_delete_ptr(sk, ptr) ((SRP_gN *)OPENSSL_sk_delete_ptr(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)))
#define sk_SRP_gN_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr))
#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_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))
#define sk_SRP_gN_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr))
#define sk_SRP_gN_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr), pnum)
#define sk_SRP_gN_sort(sk) OPENSSL_sk_sort(ossl_check_SRP_gN_sk_type(sk))
#define sk_SRP_gN_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRP_gN_sk_type(sk))
#define sk_SRP_gN_dup(sk) ((STACK_OF(SRP_gN) *)OPENSSL_sk_dup(ossl_check_const_SRP_gN_sk_type(sk)))
#define sk_SRP_gN_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRP_gN) *)OPENSSL_sk_deep_copy(ossl_check_const_SRP_gN_sk_type(sk), ossl_check_SRP_gN_copyfunc_type(copyfunc), ossl_check_SRP_gN_freefunc_type(freefunc)))
#define sk_SRP_gN_set_cmp_func(sk, cmp) ((sk_SRP_gN_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_compfunc_type(cmp)))
/* clang-format on */
OSSL_DEPRECATEDIN_3_0
SRP_VBASE *SRP_VBASE_new(char *seed_key);
OSSL_DEPRECATEDIN_3_0
void SRP_VBASE_free(SRP_VBASE *vb);
OSSL_DEPRECATEDIN_3_0
int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file);
OSSL_DEPRECATEDIN_3_0
int SRP_VBASE_add0_user(SRP_VBASE *vb, SRP_user_pwd *user_pwd);
/* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/
OSSL_DEPRECATEDIN_3_0
SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username);
OSSL_DEPRECATEDIN_3_0
char *SRP_create_verifier_ex(const char *user, const char *pass, char **salt,
char **verifier, const char *N, const char *g,
OSSL_LIB_CTX *libctx, const char *propq);
OSSL_DEPRECATEDIN_3_0
char *SRP_create_verifier(const char *user, const char *pass, char **salt,
char **verifier, const char *N, const char *g);
OSSL_DEPRECATEDIN_3_0
int SRP_create_verifier_BN_ex(const char *user, const char *pass, BIGNUM **salt,
BIGNUM **verifier, const BIGNUM *N,
const BIGNUM *g, OSSL_LIB_CTX *libctx,
const char *propq);
OSSL_DEPRECATEDIN_3_0
int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt,
BIGNUM **verifier, const BIGNUM *N,
const BIGNUM *g);
#define SRP_NO_ERROR 0
#define SRP_ERR_VBASE_INCOMPLETE_FILE 1
#define SRP_ERR_VBASE_BN_LIB 2
#define SRP_ERR_OPEN_FILE 3
#define SRP_ERR_MEMORY 4
#define DB_srptype 0
#define DB_srpverifier 1
#define DB_srpsalt 2
#define DB_srpid 3
#define DB_srpgN 4
#define DB_srpinfo 5
#undef DB_NUMBER
#define DB_NUMBER 6
#define DB_SRP_INDEX 'I'
#define DB_SRP_VALID 'V'
#define DB_SRP_REVOKED 'R'
#define DB_SRP_MODIF 'v'
/* see srp.c */
OSSL_DEPRECATEDIN_3_0
char *SRP_check_known_gN_param(const BIGNUM *g, const BIGNUM *N);
OSSL_DEPRECATEDIN_3_0
SRP_gN *SRP_get_default_gN(const char *id);
/* server side .... */
OSSL_DEPRECATEDIN_3_0
BIGNUM *SRP_Calc_server_key(const BIGNUM *A, const BIGNUM *v, const BIGNUM *u,
const BIGNUM *b, const BIGNUM *N);
OSSL_DEPRECATEDIN_3_0
BIGNUM *SRP_Calc_B_ex(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g,
const BIGNUM *v, OSSL_LIB_CTX *libctx, const char *propq);
OSSL_DEPRECATEDIN_3_0
BIGNUM *SRP_Calc_B(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g,
const BIGNUM *v);
OSSL_DEPRECATEDIN_3_0
int SRP_Verify_A_mod_N(const BIGNUM *A, const BIGNUM *N);
OSSL_DEPRECATEDIN_3_0
BIGNUM *SRP_Calc_u_ex(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N,
OSSL_LIB_CTX *libctx, const char *propq);
OSSL_DEPRECATEDIN_3_0
BIGNUM *SRP_Calc_u(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N);
/* client side .... */
OSSL_DEPRECATEDIN_3_0
BIGNUM *SRP_Calc_x_ex(const BIGNUM *s, const char *user, const char *pass,
OSSL_LIB_CTX *libctx, const char *propq);
OSSL_DEPRECATEDIN_3_0
BIGNUM *SRP_Calc_x(const BIGNUM *s, const char *user, const char *pass);
OSSL_DEPRECATEDIN_3_0
BIGNUM *SRP_Calc_A(const BIGNUM *a, const BIGNUM *N, const BIGNUM *g);
OSSL_DEPRECATEDIN_3_0
BIGNUM *SRP_Calc_client_key_ex(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g,
const BIGNUM *x, const BIGNUM *a, const BIGNUM *u,
OSSL_LIB_CTX *libctx, const char *propq);
OSSL_DEPRECATEDIN_3_0
BIGNUM *SRP_Calc_client_key(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g,
const BIGNUM *x, const BIGNUM *a, const BIGNUM *u);
OSSL_DEPRECATEDIN_3_0
int SRP_Verify_B_mod_N(const BIGNUM *B, const BIGNUM *N);
#define SRP_MINIMAL_N 1024
#endif /* OPENSSL_NO_DEPRECATED_3_0 */
/* This method ignores the configured seed and fails for an unknown user. */
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
OSSL_DEPRECATEDIN_1_1_0
SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username);
#endif
#ifdef __cplusplus
}
#endif
#endif
#endif
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,409 @@
/*
* WARNING: do not edit!
* Generated by Makefile from include/openssl/ui.h.in
*
* Copyright 2001-2020 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
*/
/* clang-format off */
/* clang-format on */
#ifndef OPENSSL_UI_H
#define OPENSSL_UI_H
#pragma once
#include <openssl/macros.h>
#ifndef OPENSSL_NO_DEPRECATED_3_0
#define HEADER_UI_H
#endif
#include <openssl/opensslconf.h>
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
#include <openssl/crypto.h>
#endif
#include <openssl/safestack.h>
#include <openssl/pem.h>
#include <openssl/types.h>
#include <openssl/uierr.h>
/* For compatibility reasons, the macro OPENSSL_NO_UI is currently retained */
#ifndef OPENSSL_NO_DEPRECATED_3_0
#ifdef OPENSSL_NO_UI_CONSOLE
#define OPENSSL_NO_UI
#endif
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*
* All the following functions return -1 or NULL on error and in some cases
* (UI_process()) -2 if interrupted or in some other way cancelled. When
* everything is fine, they return 0, a positive value or a non-NULL pointer,
* all depending on their purpose.
*/
/* Creators and destructor. */
UI *UI_new(void);
UI *UI_new_method(const UI_METHOD *method);
void UI_free(UI *ui);
/*-
The following functions are used to add strings to be printed and prompt
strings to prompt for data. The names are UI_{add,dup}_<function>_string
and UI_{add,dup}_input_boolean.
UI_{add,dup}_<function>_string have the following meanings:
add add a text or prompt string. The pointers given to these
functions are used verbatim, no copying is done.
dup make a copy of the text or prompt string, then add the copy
to the collection of strings in the user interface.
<function>
The function is a name for the functionality that the given
string shall be used for. It can be one of:
input use the string as data prompt.
verify use the string as verification prompt. This
is used to verify a previous input.
info use the string for informational output.
error use the string for error output.
Honestly, there's currently no difference between info and error for the
moment.
UI_{add,dup}_input_boolean have the same semantics for "add" and "dup",
and are typically used when one wants to prompt for a yes/no response.
All of the functions in this group take a UI and a prompt string.
The string input and verify addition functions also take a flag argument,
a buffer for the result to end up with, a minimum input size and a maximum
input size (the result buffer MUST be large enough to be able to contain
the maximum number of characters). Additionally, the verify addition
functions takes another buffer to compare the result against.
The boolean input functions take an action description string (which should
be safe to ignore if the expected user action is obvious, for example with
a dialog box with an OK button and a Cancel button), a string of acceptable
characters to mean OK and to mean Cancel. The two last strings are checked
to make sure they don't have common characters. Additionally, the same
flag argument as for the string input is taken, as well as a result buffer.
The result buffer is required to be at least one byte long. Depending on
the answer, the first character from the OK or the Cancel character strings
will be stored in the first byte of the result buffer. No NUL will be
added, so the result is *not* a string.
On success, the all return an index of the added information. That index
is useful when retrieving results with UI_get0_result(). */
int UI_add_input_string(UI *ui, const char *prompt, int flags,
char *result_buf, int minsize, int maxsize);
int UI_dup_input_string(UI *ui, const char *prompt, int flags,
char *result_buf, int minsize, int maxsize);
int UI_add_verify_string(UI *ui, const char *prompt, int flags,
char *result_buf, int minsize, int maxsize,
const char *test_buf);
int UI_dup_verify_string(UI *ui, const char *prompt, int flags,
char *result_buf, int minsize, int maxsize,
const char *test_buf);
int UI_add_input_boolean(UI *ui, const char *prompt, const char *action_desc,
const char *ok_chars, const char *cancel_chars,
int flags, char *result_buf);
int UI_dup_input_boolean(UI *ui, const char *prompt, const char *action_desc,
const char *ok_chars, const char *cancel_chars,
int flags, char *result_buf);
int UI_add_info_string(UI *ui, const char *text);
int UI_dup_info_string(UI *ui, const char *text);
int UI_add_error_string(UI *ui, const char *text);
int UI_dup_error_string(UI *ui, const char *text);
/* These are the possible flags. They can be or'ed together. */
/* Use to have echoing of input */
#define UI_INPUT_FLAG_ECHO 0x01
/*
* Use a default password. Where that password is found is completely up to
* the application, it might for example be in the user data set with
* UI_add_user_data(). It is not recommended to have more than one input in
* each UI being marked with this flag, or the application might get
* confused.
*/
#define UI_INPUT_FLAG_DEFAULT_PWD 0x02
/*-
* The user of these routines may want to define flags of their own. The core
* UI won't look at those, but will pass them on to the method routines. They
* must use higher bits so they don't get confused with the UI bits above.
* UI_INPUT_FLAG_USER_BASE tells which is the lowest bit to use. A good
* example of use is this:
*
* #define MY_UI_FLAG1 (0x01 << UI_INPUT_FLAG_USER_BASE)
*
*/
#define UI_INPUT_FLAG_USER_BASE 16
/*-
* The following function helps construct a prompt.
* phrase_desc is a textual short description of the phrase to enter,
* for example "pass phrase", and
* object_name is the name of the object
* (which might be a card name or a file name) or NULL.
* The returned string shall always be allocated on the heap with
* OPENSSL_malloc(), and need to be free'd with OPENSSL_free().
*
* If the ui_method doesn't contain a pointer to a user-defined prompt
* constructor, a default string is built, looking like this:
*
* "Enter {phrase_desc} for {object_name}:"
*
* So, if phrase_desc has the value "pass phrase" and object_name has
* the value "foo.key", the resulting string is:
*
* "Enter pass phrase for foo.key:"
*/
char *UI_construct_prompt(UI *ui_method,
const char *phrase_desc, const char *object_name);
/*
* The following function is used to store a pointer to user-specific data.
* Any previous such pointer will be returned and replaced.
*
* For callback purposes, this function makes a lot more sense than using
* ex_data, since the latter requires that different parts of OpenSSL or
* applications share the same ex_data index.
*
* Note that the UI_OpenSSL() method completely ignores the user data. Other
* methods may not, however.
*/
void *UI_add_user_data(UI *ui, void *user_data);
/*
* Alternatively, this function is used to duplicate the user data.
* This uses the duplicator method function. The destroy function will
* be used to free the user data in this case.
*/
int UI_dup_user_data(UI *ui, void *user_data);
/* We need a user data retrieving function as well. */
void *UI_get0_user_data(UI *ui);
/* Return the result associated with a prompt given with the index i. */
const char *UI_get0_result(UI *ui, int i);
int UI_get_result_length(UI *ui, int i);
/* When all strings have been added, process the whole thing. */
int UI_process(UI *ui);
/*
* Give a user interface parameterised control commands. This can be used to
* send down an integer, a data pointer or a function pointer, as well as be
* used to get information from a UI.
*/
int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f)(void));
/* The commands */
/*
* Use UI_CONTROL_PRINT_ERRORS with the value 1 to have UI_process print the
* OpenSSL error stack before printing any info or added error messages and
* before any prompting.
*/
#define UI_CTRL_PRINT_ERRORS 1
/*
* Check if a UI_process() is possible to do again with the same instance of
* a user interface. This makes UI_ctrl() return 1 if it is redoable, and 0
* if not.
*/
#define UI_CTRL_IS_REDOABLE 2
/* Some methods may use extra data */
#define UI_set_app_data(s, arg) UI_set_ex_data(s, 0, arg)
#define UI_get_app_data(s) UI_get_ex_data(s, 0)
#define UI_get_ex_new_index(l, p, newf, dupf, freef) \
CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_UI, l, p, newf, dupf, freef)
int UI_set_ex_data(UI *r, int idx, void *arg);
void *UI_get_ex_data(const UI *r, int idx);
/* Use specific methods instead of the built-in one */
void UI_set_default_method(const UI_METHOD *meth);
const UI_METHOD *UI_get_default_method(void);
const UI_METHOD *UI_get_method(UI *ui);
const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth);
#ifndef OPENSSL_NO_UI_CONSOLE
/* The method with all the built-in thingies */
UI_METHOD *UI_OpenSSL(void);
#endif
/*
* NULL method. Literally does nothing, but may serve as a placeholder
* to avoid internal default.
*/
const UI_METHOD *UI_null(void);
/* ---------- For method writers ---------- */
/*-
A method contains a number of functions that implement the low level
of the User Interface. The functions are:
an opener This function starts a session, maybe by opening
a channel to a tty, or by opening a window.
a writer This function is called to write a given string,
maybe to the tty, maybe as a field label in a
window.
a flusher This function is called to flush everything that
has been output so far. It can be used to actually
display a dialog box after it has been built.
a reader This function is called to read a given prompt,
maybe from the tty, maybe from a field in a
window. Note that it's called with all string
structures, not only the prompt ones, so it must
check such things itself.
a closer This function closes the session, maybe by closing
the channel to the tty, or closing the window.
All these functions are expected to return:
0 on error.
1 on success.
-1 on out-of-band events, for example if some prompting has
been canceled (by pressing Ctrl-C, for example). This is
only checked when returned by the flusher or the reader.
The way this is used, the opener is first called, then the writer for all
strings, then the flusher, then the reader for all strings and finally the
closer. Note that if you want to prompt from a terminal or other command
line interface, the best is to have the reader also write the prompts
instead of having the writer do it. If you want to prompt from a dialog
box, the writer can be used to build up the contents of the box, and the
flusher to actually display the box and run the event loop until all data
has been given, after which the reader only grabs the given data and puts
them back into the UI strings.
All method functions take a UI as argument. Additionally, the writer and
the reader take a UI_STRING.
*/
/*
* The UI_STRING type is the data structure that contains all the needed info
* about a string or a prompt, including test data for a verification prompt.
*/
typedef struct ui_string_st UI_STRING;
/* clang-format off */
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_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))
#define sk_UI_STRING_delete(sk, i) ((UI_STRING *)OPENSSL_sk_delete(ossl_check_UI_STRING_sk_type(sk), (i)))
#define sk_UI_STRING_delete_ptr(sk, ptr) ((UI_STRING *)OPENSSL_sk_delete_ptr(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)))
#define sk_UI_STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr))
#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_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))
#define sk_UI_STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr))
#define sk_UI_STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr), pnum)
#define sk_UI_STRING_sort(sk) OPENSSL_sk_sort(ossl_check_UI_STRING_sk_type(sk))
#define sk_UI_STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_UI_STRING_sk_type(sk))
#define sk_UI_STRING_dup(sk) ((STACK_OF(UI_STRING) *)OPENSSL_sk_dup(ossl_check_const_UI_STRING_sk_type(sk)))
#define sk_UI_STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(UI_STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_UI_STRING_sk_type(sk), ossl_check_UI_STRING_copyfunc_type(copyfunc), ossl_check_UI_STRING_freefunc_type(freefunc)))
#define sk_UI_STRING_set_cmp_func(sk, cmp) ((sk_UI_STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_compfunc_type(cmp)))
/* clang-format on */
/*
* The different types of strings that are currently supported. This is only
* needed by method authors.
*/
enum UI_string_types {
UIT_NONE = 0,
UIT_PROMPT, /* Prompt for a string */
UIT_VERIFY, /* Prompt for a string and verify */
UIT_BOOLEAN, /* Prompt for a yes/no response */
UIT_INFO, /* Send info to the user */
UIT_ERROR /* Send an error message to the user */
};
/* Create and manipulate methods */
UI_METHOD *UI_create_method(const char *name);
void UI_destroy_method(UI_METHOD *ui_method);
int UI_method_set_opener(UI_METHOD *method, int (*opener)(UI *ui));
int UI_method_set_writer(UI_METHOD *method,
int (*writer)(UI *ui, UI_STRING *uis));
int UI_method_set_flusher(UI_METHOD *method, int (*flusher)(UI *ui));
int UI_method_set_reader(UI_METHOD *method,
int (*reader)(UI *ui, UI_STRING *uis));
int UI_method_set_closer(UI_METHOD *method, int (*closer)(UI *ui));
int UI_method_set_data_duplicator(UI_METHOD *method,
void *(*duplicator)(UI *ui, void *ui_data),
void (*destructor)(UI *ui, void *ui_data));
int UI_method_set_prompt_constructor(UI_METHOD *method,
char *(*prompt_constructor)(UI *ui,
const char
*phrase_desc,
const char
*object_name));
int UI_method_set_ex_data(UI_METHOD *method, int idx, void *data);
int (*UI_method_get_opener(const UI_METHOD *method))(UI *);
int (*UI_method_get_writer(const UI_METHOD *method))(UI *, UI_STRING *);
int (*UI_method_get_flusher(const UI_METHOD *method))(UI *);
int (*UI_method_get_reader(const UI_METHOD *method))(UI *, UI_STRING *);
int (*UI_method_get_closer(const UI_METHOD *method))(UI *);
char *(*UI_method_get_prompt_constructor(const UI_METHOD *method))(UI *, const char *, const char *);
void *(*UI_method_get_data_duplicator(const UI_METHOD *method))(UI *, void *);
void (*UI_method_get_data_destructor(const UI_METHOD *method))(UI *, void *);
const void *UI_method_get_ex_data(const UI_METHOD *method, int idx);
/*
* The following functions are helpers for method writers to access relevant
* data from a UI_STRING.
*/
/* Return type of the UI_STRING */
enum UI_string_types UI_get_string_type(UI_STRING *uis);
/* Return input flags of the UI_STRING */
int UI_get_input_flags(UI_STRING *uis);
/* Return the actual string to output (the prompt, info or error) */
const char *UI_get0_output_string(UI_STRING *uis);
/*
* Return the optional action string to output (the boolean prompt
* instruction)
*/
const char *UI_get0_action_string(UI_STRING *uis);
/* Return the result of a prompt */
const char *UI_get0_result_string(UI_STRING *uis);
int UI_get_result_string_length(UI_STRING *uis);
/*
* Return the string to test the result against. Only useful with verifies.
*/
const char *UI_get0_test_string(UI_STRING *uis);
/* Return the required minimum size of the result */
int UI_get_result_minsize(UI_STRING *uis);
/* Return the required maximum size of the result */
int UI_get_result_maxsize(UI_STRING *uis);
/* Set the result of a UI_STRING. */
int UI_set_result(UI *ui, UI_STRING *uis, const char *result);
int UI_set_result_ex(UI *ui, UI_STRING *uis, const char *result, int len);
/* A couple of popular utility functions */
int UI_UTIL_read_pw_string(char *buf, int length, const char *prompt,
int verify);
int UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt,
int verify);
UI_METHOD *UI_UTIL_wrap_read_pem_callback(pem_password_cb *cb, int rwflag);
#ifdef __cplusplus
}
#endif
#endif
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,312 @@
/*
* WARNING: do not edit!
* Generated by Makefile from include/openssl/x509_acert.h.in
*
* Copyright 2022-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
*/
/* clang-format off */
/* clang-format on */
#ifndef OPENSSL_X509_ACERT_H
#define OPENSSL_X509_ACERT_H
#pragma once
#include <openssl/x509v3.h>
#include <openssl/x509.h>
#include <openssl/pem.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct X509_acert_st X509_ACERT;
typedef struct X509_acert_info_st X509_ACERT_INFO;
typedef struct ossl_object_digest_info_st OSSL_OBJECT_DIGEST_INFO;
typedef struct ossl_issuer_serial_st OSSL_ISSUER_SERIAL;
typedef struct X509_acert_issuer_v2form_st X509_ACERT_ISSUER_V2FORM;
DECLARE_ASN1_FUNCTIONS(X509_ACERT)
DECLARE_ASN1_DUP_FUNCTION(X509_ACERT)
DECLARE_ASN1_ITEM(X509_ACERT_INFO)
DECLARE_ASN1_ALLOC_FUNCTIONS(X509_ACERT_INFO)
DECLARE_ASN1_ALLOC_FUNCTIONS(OSSL_OBJECT_DIGEST_INFO)
DECLARE_ASN1_ALLOC_FUNCTIONS(OSSL_ISSUER_SERIAL)
DECLARE_ASN1_ALLOC_FUNCTIONS(X509_ACERT_ISSUER_V2FORM)
#ifndef OPENSSL_NO_STDIO
X509_ACERT *d2i_X509_ACERT_fp(FILE *fp, X509_ACERT **acert);
int i2d_X509_ACERT_fp(FILE *fp, const X509_ACERT *acert);
#endif
DECLARE_PEM_rw(X509_ACERT, X509_ACERT)
X509_ACERT *d2i_X509_ACERT_bio(BIO *bp, X509_ACERT **acert);
int i2d_X509_ACERT_bio(BIO *bp, const X509_ACERT *acert);
int X509_ACERT_sign(X509_ACERT *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_ACERT_sign_ctx(X509_ACERT *x, EVP_MD_CTX *ctx);
int X509_ACERT_verify(X509_ACERT *a, EVP_PKEY *r);
#define X509_ACERT_VERSION_2 1
const GENERAL_NAMES *X509_ACERT_get0_holder_entityName(const X509_ACERT *x);
const OSSL_ISSUER_SERIAL *X509_ACERT_get0_holder_baseCertId(const X509_ACERT *x);
const OSSL_OBJECT_DIGEST_INFO *X509_ACERT_get0_holder_digest(const X509_ACERT *x);
const X509_NAME *X509_ACERT_get0_issuerName(const X509_ACERT *x);
long X509_ACERT_get_version(const X509_ACERT *x);
void X509_ACERT_get0_signature(const X509_ACERT *x,
const ASN1_BIT_STRING **psig,
const X509_ALGOR **palg);
int X509_ACERT_get_signature_nid(const X509_ACERT *x);
const X509_ALGOR *X509_ACERT_get0_info_sigalg(const X509_ACERT *x);
const ASN1_INTEGER *X509_ACERT_get0_serialNumber(const X509_ACERT *x);
const ASN1_TIME *X509_ACERT_get0_notBefore(const X509_ACERT *x);
const ASN1_TIME *X509_ACERT_get0_notAfter(const X509_ACERT *x);
const ASN1_BIT_STRING *X509_ACERT_get0_issuerUID(const X509_ACERT *x);
int X509_ACERT_print(BIO *bp, X509_ACERT *x);
int X509_ACERT_print_ex(BIO *bp, X509_ACERT *x, unsigned long nmflags,
unsigned long cflag);
int X509_ACERT_get_attr_count(const X509_ACERT *x);
int X509_ACERT_get_attr_by_NID(const X509_ACERT *x, int nid, int lastpos);
int X509_ACERT_get_attr_by_OBJ(const X509_ACERT *x, const ASN1_OBJECT *obj,
int lastpos);
X509_ATTRIBUTE *X509_ACERT_get_attr(const X509_ACERT *x, int loc);
X509_ATTRIBUTE *X509_ACERT_delete_attr(X509_ACERT *x, int loc);
void *X509_ACERT_get_ext_d2i(const X509_ACERT *x, int nid, int *crit, int *idx);
int X509_ACERT_add1_ext_i2d(X509_ACERT *x, int nid, void *value, int crit,
unsigned long flags);
const STACK_OF(X509_EXTENSION) *X509_ACERT_get0_extensions(const X509_ACERT *x);
#define OSSL_OBJECT_DIGEST_INFO_PUBLIC_KEY 0
#define OSSL_OBJECT_DIGEST_INFO_PUBLIC_KEY_CERT 1
#define OSSL_OBJECT_DIGEST_INFO_OTHER 2 /* must not be used in RFC 5755 profile */
int X509_ACERT_set_version(X509_ACERT *x, long version);
void X509_ACERT_set0_holder_entityName(X509_ACERT *x, GENERAL_NAMES *name);
void X509_ACERT_set0_holder_baseCertId(X509_ACERT *x, OSSL_ISSUER_SERIAL *isss);
void X509_ACERT_set0_holder_digest(X509_ACERT *x,
OSSL_OBJECT_DIGEST_INFO *dinfo);
int X509_ACERT_add1_attr(X509_ACERT *x, X509_ATTRIBUTE *attr);
int X509_ACERT_add1_attr_by_OBJ(X509_ACERT *x, const ASN1_OBJECT *obj,
int type, const void *bytes, int len);
int X509_ACERT_add1_attr_by_NID(X509_ACERT *x, int nid, int type,
const void *bytes, int len);
int X509_ACERT_add1_attr_by_txt(X509_ACERT *x, const char *attrname, int type,
const unsigned char *bytes, int len);
int X509_ACERT_add_attr_nconf(CONF *conf, const char *section,
X509_ACERT *acert);
int X509_ACERT_set1_issuerName(X509_ACERT *x, const X509_NAME *name);
int X509_ACERT_set1_serialNumber(X509_ACERT *x, const ASN1_INTEGER *serial);
int X509_ACERT_set1_notBefore(X509_ACERT *x, const ASN1_GENERALIZEDTIME *time);
int X509_ACERT_set1_notAfter(X509_ACERT *x, const ASN1_GENERALIZEDTIME *time);
void OSSL_OBJECT_DIGEST_INFO_get0_digest(const OSSL_OBJECT_DIGEST_INFO *o,
int *digestedObjectType,
const X509_ALGOR **digestAlgorithm,
const ASN1_BIT_STRING **digest);
int OSSL_OBJECT_DIGEST_INFO_set1_digest(OSSL_OBJECT_DIGEST_INFO *o,
int digestedObjectType,
X509_ALGOR *digestAlgorithm,
ASN1_BIT_STRING *digest);
const X509_NAME *OSSL_ISSUER_SERIAL_get0_issuer(const OSSL_ISSUER_SERIAL *isss);
const ASN1_INTEGER *OSSL_ISSUER_SERIAL_get0_serial(const OSSL_ISSUER_SERIAL *isss);
const ASN1_BIT_STRING *OSSL_ISSUER_SERIAL_get0_issuerUID(const OSSL_ISSUER_SERIAL *isss);
int OSSL_ISSUER_SERIAL_set1_issuer(OSSL_ISSUER_SERIAL *isss,
const X509_NAME *issuer);
int OSSL_ISSUER_SERIAL_set1_serial(OSSL_ISSUER_SERIAL *isss,
const ASN1_INTEGER *serial);
int OSSL_ISSUER_SERIAL_set1_issuerUID(OSSL_ISSUER_SERIAL *isss,
const ASN1_BIT_STRING *uid);
#define OSSL_IETFAS_OCTETS 0
#define OSSL_IETFAS_OID 1
#define OSSL_IETFAS_STRING 2
typedef struct OSSL_IETF_ATTR_SYNTAX_VALUE_st OSSL_IETF_ATTR_SYNTAX_VALUE;
typedef struct OSSL_IETF_ATTR_SYNTAX_st OSSL_IETF_ATTR_SYNTAX;
/* clang-format off */
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_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))
#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_delete(sk, i) ((OSSL_IETF_ATTR_SYNTAX_VALUE *)OPENSSL_sk_delete(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), (i)))
#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_delete_ptr(sk, ptr) ((OSSL_IETF_ATTR_SYNTAX_VALUE *)OPENSSL_sk_delete_ptr(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_push(sk, ptr) OPENSSL_sk_push(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_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_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))
#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_find_ex(sk, ptr) OPENSSL_sk_find_ex(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_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_type(ptr), pnum)
#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk))
#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk))
#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_dup(sk) ((STACK_OF(OSSL_IETF_ATTR_SYNTAX_VALUE) *)OPENSSL_sk_dup(ossl_check_const_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk)))
#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_IETF_ATTR_SYNTAX_VALUE) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_copyfunc_type(copyfunc), ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_freefunc_type(freefunc)))
#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_set_cmp_func(sk, cmp) ((sk_OSSL_IETF_ATTR_SYNTAX_VALUE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_compfunc_type(cmp)))
/* clang-format on */
DECLARE_ASN1_ITEM(OSSL_IETF_ATTR_SYNTAX_VALUE)
DECLARE_ASN1_ALLOC_FUNCTIONS(OSSL_IETF_ATTR_SYNTAX_VALUE)
DECLARE_ASN1_FUNCTIONS(OSSL_IETF_ATTR_SYNTAX)
const GENERAL_NAMES *
OSSL_IETF_ATTR_SYNTAX_get0_policyAuthority(const OSSL_IETF_ATTR_SYNTAX *a);
void OSSL_IETF_ATTR_SYNTAX_set0_policyAuthority(OSSL_IETF_ATTR_SYNTAX *a,
GENERAL_NAMES *names);
int OSSL_IETF_ATTR_SYNTAX_get_value_num(const OSSL_IETF_ATTR_SYNTAX *a);
void *OSSL_IETF_ATTR_SYNTAX_get0_value(const OSSL_IETF_ATTR_SYNTAX *a,
int ind, int *type);
int OSSL_IETF_ATTR_SYNTAX_add1_value(OSSL_IETF_ATTR_SYNTAX *a, int type,
void *data);
int OSSL_IETF_ATTR_SYNTAX_print(BIO *bp, OSSL_IETF_ATTR_SYNTAX *a, int indent);
struct TARGET_CERT_st {
OSSL_ISSUER_SERIAL *targetCertificate;
GENERAL_NAME *targetName;
OSSL_OBJECT_DIGEST_INFO *certDigestInfo;
};
typedef struct TARGET_CERT_st OSSL_TARGET_CERT;
#define OSSL_TGT_TARGET_NAME 0
#define OSSL_TGT_TARGET_GROUP 1
#define OSSL_TGT_TARGET_CERT 2
typedef struct TARGET_st {
int type;
union {
GENERAL_NAME *targetName;
GENERAL_NAME *targetGroup;
OSSL_TARGET_CERT *targetCert;
} choice;
} OSSL_TARGET;
typedef STACK_OF(OSSL_TARGET) OSSL_TARGETS;
typedef STACK_OF(OSSL_TARGETS) OSSL_TARGETING_INFORMATION;
/* clang-format off */
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_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))
#define sk_OSSL_TARGET_delete(sk, i) ((OSSL_TARGET *)OPENSSL_sk_delete(ossl_check_OSSL_TARGET_sk_type(sk), (i)))
#define sk_OSSL_TARGET_delete_ptr(sk, ptr) ((OSSL_TARGET *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_TARGET_sk_type(sk), ossl_check_OSSL_TARGET_type(ptr)))
#define sk_OSSL_TARGET_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_TARGET_sk_type(sk), ossl_check_OSSL_TARGET_type(ptr))
#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_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))
#define sk_OSSL_TARGET_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_TARGET_sk_type(sk), ossl_check_OSSL_TARGET_type(ptr))
#define sk_OSSL_TARGET_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_TARGET_sk_type(sk), ossl_check_OSSL_TARGET_type(ptr), pnum)
#define sk_OSSL_TARGET_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_TARGET_sk_type(sk))
#define sk_OSSL_TARGET_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_TARGET_sk_type(sk))
#define sk_OSSL_TARGET_dup(sk) ((STACK_OF(OSSL_TARGET) *)OPENSSL_sk_dup(ossl_check_const_OSSL_TARGET_sk_type(sk)))
#define sk_OSSL_TARGET_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_TARGET) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_TARGET_sk_type(sk), ossl_check_OSSL_TARGET_copyfunc_type(copyfunc), ossl_check_OSSL_TARGET_freefunc_type(freefunc)))
#define sk_OSSL_TARGET_set_cmp_func(sk, cmp) ((sk_OSSL_TARGET_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_TARGET_sk_type(sk), ossl_check_OSSL_TARGET_compfunc_type(cmp)))
/* clang-format on */
/* clang-format off */
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_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))
#define sk_OSSL_TARGETS_delete(sk, i) ((OSSL_TARGETS *)OPENSSL_sk_delete(ossl_check_OSSL_TARGETS_sk_type(sk), (i)))
#define sk_OSSL_TARGETS_delete_ptr(sk, ptr) ((OSSL_TARGETS *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_TARGETS_sk_type(sk), ossl_check_OSSL_TARGETS_type(ptr)))
#define sk_OSSL_TARGETS_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_TARGETS_sk_type(sk), ossl_check_OSSL_TARGETS_type(ptr))
#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_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))
#define sk_OSSL_TARGETS_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_TARGETS_sk_type(sk), ossl_check_OSSL_TARGETS_type(ptr))
#define sk_OSSL_TARGETS_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_TARGETS_sk_type(sk), ossl_check_OSSL_TARGETS_type(ptr), pnum)
#define sk_OSSL_TARGETS_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_TARGETS_sk_type(sk))
#define sk_OSSL_TARGETS_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_TARGETS_sk_type(sk))
#define sk_OSSL_TARGETS_dup(sk) ((STACK_OF(OSSL_TARGETS) *)OPENSSL_sk_dup(ossl_check_const_OSSL_TARGETS_sk_type(sk)))
#define sk_OSSL_TARGETS_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_TARGETS) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_TARGETS_sk_type(sk), ossl_check_OSSL_TARGETS_copyfunc_type(copyfunc), ossl_check_OSSL_TARGETS_freefunc_type(freefunc)))
#define sk_OSSL_TARGETS_set_cmp_func(sk, cmp) ((sk_OSSL_TARGETS_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_TARGETS_sk_type(sk), ossl_check_OSSL_TARGETS_compfunc_type(cmp)))
/* clang-format on */
DECLARE_ASN1_FUNCTIONS(OSSL_TARGET)
DECLARE_ASN1_FUNCTIONS(OSSL_TARGETS)
DECLARE_ASN1_FUNCTIONS(OSSL_TARGETING_INFORMATION)
typedef STACK_OF(OSSL_ISSUER_SERIAL) OSSL_AUTHORITY_ATTRIBUTE_ID_SYNTAX;
DECLARE_ASN1_FUNCTIONS(OSSL_AUTHORITY_ATTRIBUTE_ID_SYNTAX)
/* clang-format off */
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_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))
#define sk_OSSL_ISSUER_SERIAL_delete(sk, i) ((OSSL_ISSUER_SERIAL *)OPENSSL_sk_delete(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), (i)))
#define sk_OSSL_ISSUER_SERIAL_delete_ptr(sk, ptr) ((OSSL_ISSUER_SERIAL *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), ossl_check_OSSL_ISSUER_SERIAL_type(ptr)))
#define sk_OSSL_ISSUER_SERIAL_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), ossl_check_OSSL_ISSUER_SERIAL_type(ptr))
#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_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))
#define sk_OSSL_ISSUER_SERIAL_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), ossl_check_OSSL_ISSUER_SERIAL_type(ptr))
#define sk_OSSL_ISSUER_SERIAL_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), ossl_check_OSSL_ISSUER_SERIAL_type(ptr), pnum)
#define sk_OSSL_ISSUER_SERIAL_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk))
#define sk_OSSL_ISSUER_SERIAL_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_ISSUER_SERIAL_sk_type(sk))
#define sk_OSSL_ISSUER_SERIAL_dup(sk) ((STACK_OF(OSSL_ISSUER_SERIAL) *)OPENSSL_sk_dup(ossl_check_const_OSSL_ISSUER_SERIAL_sk_type(sk)))
#define sk_OSSL_ISSUER_SERIAL_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_ISSUER_SERIAL) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_ISSUER_SERIAL_sk_type(sk), ossl_check_OSSL_ISSUER_SERIAL_copyfunc_type(copyfunc), ossl_check_OSSL_ISSUER_SERIAL_freefunc_type(freefunc)))
#define sk_OSSL_ISSUER_SERIAL_set_cmp_func(sk, cmp) ((sk_OSSL_ISSUER_SERIAL_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), ossl_check_OSSL_ISSUER_SERIAL_compfunc_type(cmp)))
/* clang-format on */
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,904 @@
/*
* WARNING: do not edit!
* Generated by Makefile from include/openssl/x509_vfy.h.in
*
* Copyright 1995-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
*/
/* clang-format off */
/* clang-format on */
#ifndef OPENSSL_X509_VFY_H
#define OPENSSL_X509_VFY_H
#pragma once
#include <openssl/macros.h>
#ifndef OPENSSL_NO_DEPRECATED_3_0
#define HEADER_X509_VFY_H
#endif
/*
* Protect against recursion, x509.h and x509_vfy.h each include the other.
*/
#ifndef OPENSSL_X509_H
#include <openssl/x509.h>
#endif
#include <openssl/opensslconf.h>
#include <openssl/lhash.h>
#include <openssl/bio.h>
#include <openssl/crypto.h>
#include <openssl/symhacks.h>
#ifdef __cplusplus
extern "C" {
#endif
/*-
SSL_CTX -> X509_STORE
-> X509_LOOKUP
->X509_LOOKUP_METHOD
-> X509_LOOKUP
->X509_LOOKUP_METHOD
SSL -> X509_STORE_CTX
->X509_STORE
The X509_STORE holds the tables etc for verification stuff.
A X509_STORE_CTX is used while validating a single certificate.
The X509_STORE has X509_LOOKUPs for looking up certs.
The X509_STORE then calls a function to actually verify the
certificate chain.
*/
typedef enum {
X509_LU_NONE = 0,
X509_LU_X509,
X509_LU_CRL
} X509_LOOKUP_TYPE;
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
#define X509_LU_RETRY -1
#define X509_LU_FAIL 0
#endif
/* clang-format off */
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_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))
#define sk_X509_LOOKUP_delete(sk, i) ((X509_LOOKUP *)OPENSSL_sk_delete(ossl_check_X509_LOOKUP_sk_type(sk), (i)))
#define sk_X509_LOOKUP_delete_ptr(sk, ptr) ((X509_LOOKUP *)OPENSSL_sk_delete_ptr(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)))
#define sk_X509_LOOKUP_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr))
#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_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))
#define sk_X509_LOOKUP_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr))
#define sk_X509_LOOKUP_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr), pnum)
#define sk_X509_LOOKUP_sort(sk) OPENSSL_sk_sort(ossl_check_X509_LOOKUP_sk_type(sk))
#define sk_X509_LOOKUP_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_LOOKUP_sk_type(sk))
#define sk_X509_LOOKUP_dup(sk) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_dup(ossl_check_const_X509_LOOKUP_sk_type(sk)))
#define sk_X509_LOOKUP_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_copyfunc_type(copyfunc), ossl_check_X509_LOOKUP_freefunc_type(freefunc)))
#define sk_X509_LOOKUP_set_cmp_func(sk, cmp) ((sk_X509_LOOKUP_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_compfunc_type(cmp)))
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_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))
#define sk_X509_OBJECT_delete(sk, i) ((X509_OBJECT *)OPENSSL_sk_delete(ossl_check_X509_OBJECT_sk_type(sk), (i)))
#define sk_X509_OBJECT_delete_ptr(sk, ptr) ((X509_OBJECT *)OPENSSL_sk_delete_ptr(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)))
#define sk_X509_OBJECT_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr))
#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_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))
#define sk_X509_OBJECT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr))
#define sk_X509_OBJECT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr), pnum)
#define sk_X509_OBJECT_sort(sk) OPENSSL_sk_sort(ossl_check_X509_OBJECT_sk_type(sk))
#define sk_X509_OBJECT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_OBJECT_sk_type(sk))
#define sk_X509_OBJECT_dup(sk) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_dup(ossl_check_const_X509_OBJECT_sk_type(sk)))
#define sk_X509_OBJECT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_copyfunc_type(copyfunc), ossl_check_X509_OBJECT_freefunc_type(freefunc)))
#define sk_X509_OBJECT_set_cmp_func(sk, cmp) ((sk_X509_OBJECT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_compfunc_type(cmp)))
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_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))
#define sk_X509_VERIFY_PARAM_delete(sk, i) ((X509_VERIFY_PARAM *)OPENSSL_sk_delete(ossl_check_X509_VERIFY_PARAM_sk_type(sk), (i)))
#define sk_X509_VERIFY_PARAM_delete_ptr(sk, ptr) ((X509_VERIFY_PARAM *)OPENSSL_sk_delete_ptr(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)))
#define sk_X509_VERIFY_PARAM_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr))
#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_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))
#define sk_X509_VERIFY_PARAM_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr))
#define sk_X509_VERIFY_PARAM_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr), pnum)
#define sk_X509_VERIFY_PARAM_sort(sk) OPENSSL_sk_sort(ossl_check_X509_VERIFY_PARAM_sk_type(sk))
#define sk_X509_VERIFY_PARAM_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk))
#define sk_X509_VERIFY_PARAM_dup(sk) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_dup(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk)))
#define sk_X509_VERIFY_PARAM_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_copyfunc_type(copyfunc), ossl_check_X509_VERIFY_PARAM_freefunc_type(freefunc)))
#define sk_X509_VERIFY_PARAM_set_cmp_func(sk, cmp) ((sk_X509_VERIFY_PARAM_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp)))
/* clang-format on */
/* This is used for a table of trust checking functions */
typedef struct x509_trust_st {
int trust;
int flags;
int (*check_trust)(struct x509_trust_st *, X509 *, int);
char *name;
int arg1;
void *arg2;
} X509_TRUST;
/* clang-format off */
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_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))
#define sk_X509_TRUST_delete(sk, i) ((X509_TRUST *)OPENSSL_sk_delete(ossl_check_X509_TRUST_sk_type(sk), (i)))
#define sk_X509_TRUST_delete_ptr(sk, ptr) ((X509_TRUST *)OPENSSL_sk_delete_ptr(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)))
#define sk_X509_TRUST_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr))
#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_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))
#define sk_X509_TRUST_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr))
#define sk_X509_TRUST_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr), pnum)
#define sk_X509_TRUST_sort(sk) OPENSSL_sk_sort(ossl_check_X509_TRUST_sk_type(sk))
#define sk_X509_TRUST_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_TRUST_sk_type(sk))
#define sk_X509_TRUST_dup(sk) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_dup(ossl_check_const_X509_TRUST_sk_type(sk)))
#define sk_X509_TRUST_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_copyfunc_type(copyfunc), ossl_check_X509_TRUST_freefunc_type(freefunc)))
#define sk_X509_TRUST_set_cmp_func(sk, cmp) ((sk_X509_TRUST_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_compfunc_type(cmp)))
/* clang-format on */
/* standard trust ids */
#define X509_TRUST_DEFAULT 0 /* Only valid in purpose settings */
#define X509_TRUST_COMPAT 1
#define X509_TRUST_SSL_CLIENT 2
#define X509_TRUST_SSL_SERVER 3
#define X509_TRUST_EMAIL 4
#define X509_TRUST_OBJECT_SIGN 5
#define X509_TRUST_OCSP_SIGN 6
#define X509_TRUST_OCSP_REQUEST 7
#define X509_TRUST_TSA 8
/* Keep these up to date! */
#define X509_TRUST_MIN 1
#define X509_TRUST_MAX 8
/* trust_flags values */
#define X509_TRUST_DYNAMIC (1U << 0)
#define X509_TRUST_DYNAMIC_NAME (1U << 1)
/* No compat trust if self-signed, preempts "DO_SS" */
#define X509_TRUST_NO_SS_COMPAT (1U << 2)
/* Compat trust if no explicit accepted trust EKUs */
#define X509_TRUST_DO_SS_COMPAT (1U << 3)
/* Accept "anyEKU" as a wildcard rejection OID and as a wildcard trust OID */
#define X509_TRUST_OK_ANY_EKU (1U << 4)
/* check_trust return codes */
#define X509_TRUST_TRUSTED 1
#define X509_TRUST_REJECTED 2
#define X509_TRUST_UNTRUSTED 3
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),
const char *name, int arg1, void *arg2);
void X509_TRUST_cleanup(void);
int X509_TRUST_get_flags(const X509_TRUST *xp);
char *X509_TRUST_get0_name(const X509_TRUST *xp);
int X509_TRUST_get_trust(const X509_TRUST *xp);
int X509_trusted(const X509 *x);
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);
int (*X509_TRUST_set_default(int (*trust)(int, X509 *, int)))(int, X509 *,
int);
int X509_check_trust(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,
X509_STORE *store, int with_self_signed,
OSSL_LIB_CTX *libctx, const char *propq);
int X509_STORE_set_depth(X509_STORE *store, int depth);
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);
typedef int (*X509_STORE_CTX_check_issued_fn)(X509_STORE_CTX *ctx,
X509 *x, 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);
typedef int (*X509_STORE_CTX_check_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl);
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,
const X509_NAME *nm);
typedef STACK_OF(X509_CRL)
*(*X509_STORE_CTX_lookup_crls_fn)(const X509_STORE_CTX *ctx,
const X509_NAME *nm);
typedef int (*X509_STORE_CTX_cleanup_fn)(X509_STORE_CTX *ctx);
void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth);
#define X509_STORE_CTX_set_app_data(ctx, data) \
X509_STORE_CTX_set_ex_data(ctx, 0, data)
#define X509_STORE_CTX_get_app_data(ctx) \
X509_STORE_CTX_get_ex_data(ctx, 0)
#define X509_L_FILE_LOAD 1
#define X509_L_ADD_DIR 2
#define X509_L_ADD_STORE 3
#define X509_L_LOAD_STORE 4
#define X509_LOOKUP_load_file(x, name, type) \
X509_LOOKUP_ctrl((x), X509_L_FILE_LOAD, (name), (long)(type), NULL)
#define X509_LOOKUP_add_dir(x, name, type) \
X509_LOOKUP_ctrl((x), X509_L_ADD_DIR, (name), (long)(type), NULL)
#define X509_LOOKUP_add_store(x, name) \
X509_LOOKUP_ctrl((x), X509_L_ADD_STORE, (name), 0, NULL)
#define X509_LOOKUP_load_store(x, name) \
X509_LOOKUP_ctrl((x), X509_L_LOAD_STORE, (name), 0, NULL)
#define X509_LOOKUP_load_file_ex(x, name, type, libctx, propq) \
X509_LOOKUP_ctrl_ex((x), X509_L_FILE_LOAD, (name), (long)(type), NULL, \
(libctx), (propq))
#define X509_LOOKUP_load_store_ex(x, name, libctx, propq) \
X509_LOOKUP_ctrl_ex((x), X509_L_LOAD_STORE, (name), 0, NULL, \
(libctx), (propq))
#define X509_LOOKUP_add_store_ex(x, name, libctx, propq) \
X509_LOOKUP_ctrl_ex((x), X509_L_ADD_STORE, (name), 0, NULL, \
(libctx), (propq))
#define X509_V_OK 0
#define X509_V_ERR_UNSPECIFIED 1
#define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2
#define X509_V_ERR_UNABLE_TO_GET_CRL 3
#define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4
#define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5
#define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6
#define X509_V_ERR_CERT_SIGNATURE_FAILURE 7
#define X509_V_ERR_CRL_SIGNATURE_FAILURE 8
#define X509_V_ERR_CERT_NOT_YET_VALID 9
#define X509_V_ERR_CERT_HAS_EXPIRED 10
#define X509_V_ERR_CRL_NOT_YET_VALID 11
#define X509_V_ERR_CRL_HAS_EXPIRED 12
#define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13
#define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14
#define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15
#define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16
#define X509_V_ERR_OUT_OF_MEM 17
#define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18
#define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19
#define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20
#define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21
#define X509_V_ERR_CERT_CHAIN_TOO_LONG 22
#define X509_V_ERR_CERT_REVOKED 23
#define X509_V_ERR_NO_ISSUER_PUBLIC_KEY 24
#define X509_V_ERR_PATH_LENGTH_EXCEEDED 25
#define X509_V_ERR_INVALID_PURPOSE 26
#define X509_V_ERR_CERT_UNTRUSTED 27
#define X509_V_ERR_CERT_REJECTED 28
/* These are 'informational' when looking for issuer cert */
#define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29
#define X509_V_ERR_AKID_SKID_MISMATCH 30
#define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31
#define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32
#define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33
#define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34
#define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35
#define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36
#define X509_V_ERR_INVALID_NON_CA 37
#define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38
#define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39
#define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40
#define X509_V_ERR_INVALID_EXTENSION 41
#define X509_V_ERR_INVALID_POLICY_EXTENSION 42
#define X509_V_ERR_NO_EXPLICIT_POLICY 43
#define X509_V_ERR_DIFFERENT_CRL_SCOPE 44
#define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45
#define X509_V_ERR_UNNESTED_RESOURCE 46
#define X509_V_ERR_PERMITTED_VIOLATION 47
#define X509_V_ERR_EXCLUDED_VIOLATION 48
#define X509_V_ERR_SUBTREE_MINMAX 49
/* The application is not happy */
#define X509_V_ERR_APPLICATION_VERIFICATION 50
#define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51
#define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52
#define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53
#define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54
/* Another issuer check debug option */
#define X509_V_ERR_PATH_LOOP 55
/* Suite B mode algorithm violation */
#define X509_V_ERR_SUITE_B_INVALID_VERSION 56
#define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57
#define X509_V_ERR_SUITE_B_INVALID_CURVE 58
#define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59
#define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60
#define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61
/* Host, email and IP check errors */
#define X509_V_ERR_HOSTNAME_MISMATCH 62
#define X509_V_ERR_EMAIL_MISMATCH 63
#define X509_V_ERR_IP_ADDRESS_MISMATCH 64
/* DANE TLSA errors */
#define X509_V_ERR_DANE_NO_MATCH 65
/* security level errors */
#define X509_V_ERR_EE_KEY_TOO_SMALL 66
#define X509_V_ERR_CA_KEY_TOO_SMALL 67
#define X509_V_ERR_CA_MD_TOO_WEAK 68
/* Caller error */
#define X509_V_ERR_INVALID_CALL 69
/* Issuer lookup error */
#define X509_V_ERR_STORE_LOOKUP 70
/* Certificate transparency */
#define X509_V_ERR_NO_VALID_SCTS 71
#define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72
/* OCSP status errors */
#define X509_V_ERR_OCSP_VERIFY_NEEDED 73 /* Need OCSP verification */
#define X509_V_ERR_OCSP_VERIFY_FAILED 74 /* Couldn't verify cert through OCSP */
#define X509_V_ERR_OCSP_CERT_UNKNOWN 75 /* Certificate wasn't recognized by the OCSP responder */
#define X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM 76
#define X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH 77
/* Errors in case a check in X509_V_FLAG_X509_STRICT mode fails */
#define X509_V_ERR_SIGNATURE_ALGORITHM_INCONSISTENCY 78
#define X509_V_ERR_INVALID_CA 79
#define X509_V_ERR_PATHLEN_INVALID_FOR_NON_CA 80
#define X509_V_ERR_PATHLEN_WITHOUT_KU_KEY_CERT_SIGN 81
#define X509_V_ERR_KU_KEY_CERT_SIGN_INVALID_FOR_NON_CA 82
#define X509_V_ERR_ISSUER_NAME_EMPTY 83
#define X509_V_ERR_SUBJECT_NAME_EMPTY 84
#define X509_V_ERR_MISSING_AUTHORITY_KEY_IDENTIFIER 85
#define X509_V_ERR_MISSING_SUBJECT_KEY_IDENTIFIER 86
#define X509_V_ERR_EMPTY_SUBJECT_ALT_NAME 87
#define X509_V_ERR_EMPTY_SUBJECT_SAN_NOT_CRITICAL 88
#define X509_V_ERR_CA_BCONS_NOT_CRITICAL 89
#define X509_V_ERR_AUTHORITY_KEY_IDENTIFIER_CRITICAL 90
#define X509_V_ERR_SUBJECT_KEY_IDENTIFIER_CRITICAL 91
#define X509_V_ERR_CA_CERT_MISSING_KEY_USAGE 92
#define X509_V_ERR_EXTENSIONS_REQUIRE_VERSION_3 93
#define X509_V_ERR_EC_KEY_EXPLICIT_PARAMS 94
#define X509_V_ERR_RPK_UNTRUSTED 95
/* Certificate verify flags */
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
#define X509_V_FLAG_CB_ISSUER_CHECK 0x0 /* Deprecated */
#endif
/* Use check time instead of current time */
#define X509_V_FLAG_USE_CHECK_TIME 0x2
/* Lookup CRLs */
#define X509_V_FLAG_CRL_CHECK 0x4
/* Lookup CRLs for whole chain */
#define X509_V_FLAG_CRL_CHECK_ALL 0x8
/* Ignore unhandled critical extensions */
#define X509_V_FLAG_IGNORE_CRITICAL 0x10
/* Disable workarounds for broken certificates */
#define X509_V_FLAG_X509_STRICT 0x20
/* Enable proxy certificate validation */
#define X509_V_FLAG_ALLOW_PROXY_CERTS 0x40
/* Enable policy checking */
#define X509_V_FLAG_POLICY_CHECK 0x80
/* Policy variable require-explicit-policy */
#define X509_V_FLAG_EXPLICIT_POLICY 0x100
/* Policy variable inhibit-any-policy */
#define X509_V_FLAG_INHIBIT_ANY 0x200
/* Policy variable inhibit-policy-mapping */
#define X509_V_FLAG_INHIBIT_MAP 0x400
/* Notify callback that policy is OK */
#define X509_V_FLAG_NOTIFY_POLICY 0x800
/* Extended CRL features such as indirect CRLs, alternate CRL signing keys */
#define X509_V_FLAG_EXTENDED_CRL_SUPPORT 0x1000
/* Delta CRL support */
#define X509_V_FLAG_USE_DELTAS 0x2000
/* Check self-signed CA signature */
#define X509_V_FLAG_CHECK_SS_SIGNATURE 0x4000
/* Use trusted store first */
#define X509_V_FLAG_TRUSTED_FIRST 0x8000
/* Suite B 128 bit only mode: not normally used */
#define X509_V_FLAG_SUITEB_128_LOS_ONLY 0x10000
/* Suite B 192 bit only mode */
#define X509_V_FLAG_SUITEB_192_LOS 0x20000
/* Suite B 128 bit mode allowing 192 bit algorithms */
#define X509_V_FLAG_SUITEB_128_LOS 0x30000
/* Allow partial chains if at least one certificate is in trusted store */
#define X509_V_FLAG_PARTIAL_CHAIN 0x80000
/*
* If the initial chain is not trusted, do not attempt to build an alternative
* chain. Alternate chain checking was introduced in 1.1.0. Setting this flag
* will force the behaviour to match that of previous versions.
*/
#define X509_V_FLAG_NO_ALT_CHAINS 0x100000
/* Do not check certificate/CRL validity against current time */
#define X509_V_FLAG_NO_CHECK_TIME 0x200000
#define X509_VP_FLAG_DEFAULT 0x1
#define X509_VP_FLAG_OVERWRITE 0x2
#define X509_VP_FLAG_RESET_FLAGS 0x4
#define X509_VP_FLAG_LOCKED 0x8
#define X509_VP_FLAG_ONCE 0x10
/* Internal use: mask of policy related options */
#define X509_V_FLAG_POLICY_MASK (X509_V_FLAG_POLICY_CHECK \
| X509_V_FLAG_EXPLICIT_POLICY \
| X509_V_FLAG_INHIBIT_ANY \
| X509_V_FLAG_INHIBIT_MAP)
int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, X509_LOOKUP_TYPE type,
const X509_NAME *name);
X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h,
X509_LOOKUP_TYPE type,
const X509_NAME *name);
X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h,
X509_OBJECT *x);
int X509_OBJECT_up_ref_count(X509_OBJECT *a);
X509_OBJECT *X509_OBJECT_new(void);
void X509_OBJECT_free(X509_OBJECT *a);
X509_LOOKUP_TYPE X509_OBJECT_get_type(const X509_OBJECT *a);
X509 *X509_OBJECT_get0_X509(const X509_OBJECT *a);
int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj);
X509_CRL *X509_OBJECT_get0_X509_CRL(const X509_OBJECT *a);
int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj);
X509_STORE *X509_STORE_new(void);
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);
STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *xs);
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,
const X509_NAME *nm);
STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(const X509_STORE_CTX *st,
const X509_NAME *nm);
int X509_STORE_set_flags(X509_STORE *xs, unsigned long flags);
int X509_STORE_set_purpose(X509_STORE *xs, int purpose);
int X509_STORE_set_trust(X509_STORE *xs, int trust);
int X509_STORE_set1_param(X509_STORE *xs, const X509_VERIFY_PARAM *pm);
X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *xs);
void X509_STORE_set_verify(X509_STORE *xs, X509_STORE_CTX_verify_fn verify);
#define X509_STORE_set_verify_func(ctx, func) \
X509_STORE_set_verify((ctx), (func))
void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx,
X509_STORE_CTX_verify_fn verify);
X509_STORE_CTX_verify_fn X509_STORE_get_verify(const X509_STORE *xs);
void X509_STORE_set_verify_cb(X509_STORE *xs,
X509_STORE_CTX_verify_cb verify_cb);
#define X509_STORE_set_verify_cb_func(ctx, func) \
X509_STORE_set_verify_cb((ctx), (func))
X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(const X509_STORE *xs);
void X509_STORE_set_get_issuer(X509_STORE *xs,
X509_STORE_CTX_get_issuer_fn get_issuer);
X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(const X509_STORE *xs);
void X509_STORE_set_check_issued(X509_STORE *xs,
X509_STORE_CTX_check_issued_fn check_issued);
X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(const X509_STORE *s);
void X509_STORE_set_check_revocation(X509_STORE *xs,
X509_STORE_CTX_check_revocation_fn check_revocation);
X509_STORE_CTX_check_revocation_fn
X509_STORE_get_check_revocation(const X509_STORE *xs);
void X509_STORE_set_get_crl(X509_STORE *xs,
X509_STORE_CTX_get_crl_fn get_crl);
X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(const X509_STORE *xs);
void X509_STORE_set_check_crl(X509_STORE *xs,
X509_STORE_CTX_check_crl_fn check_crl);
X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(const X509_STORE *xs);
void X509_STORE_set_cert_crl(X509_STORE *xs,
X509_STORE_CTX_cert_crl_fn cert_crl);
X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(const X509_STORE *xs);
void X509_STORE_set_check_policy(X509_STORE *xs,
X509_STORE_CTX_check_policy_fn check_policy);
X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(const X509_STORE *s);
void X509_STORE_set_lookup_certs(X509_STORE *xs,
X509_STORE_CTX_lookup_certs_fn lookup_certs);
X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(const X509_STORE *s);
void X509_STORE_set_lookup_crls(X509_STORE *xs,
X509_STORE_CTX_lookup_crls_fn lookup_crls);
#define X509_STORE_set_lookup_crls_cb(ctx, func) \
X509_STORE_set_lookup_crls((ctx), (func))
X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(const X509_STORE *xs);
void X509_STORE_set_cleanup(X509_STORE *xs,
X509_STORE_CTX_cleanup_fn cleanup);
X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(const X509_STORE *xs);
#define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \
CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, l, p, newf, dupf, freef)
int X509_STORE_set_ex_data(X509_STORE *xs, int idx, void *data);
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);
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);
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);
void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx);
X509_STORE *X509_STORE_CTX_get0_store(const X509_STORE_CTX *ctx);
X509 *X509_STORE_CTX_get0_cert(const X509_STORE_CTX *ctx);
EVP_PKEY *X509_STORE_CTX_get0_rpk(const X509_STORE_CTX *ctx);
STACK_OF(X509) *X509_STORE_CTX_get0_untrusted(const X509_STORE_CTX *ctx);
void X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *ctx, STACK_OF(X509) *sk);
void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx,
X509_STORE_CTX_verify_cb verify);
X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(const X509_STORE_CTX *ctx);
X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(const X509_STORE_CTX *ctx);
X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(const X509_STORE_CTX *ctx);
X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(const X509_STORE_CTX *ctx);
X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(const X509_STORE_CTX *ctx);
void X509_STORE_CTX_set_get_crl(X509_STORE_CTX *ctx,
X509_STORE_CTX_get_crl_fn get_crl);
X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(const X509_STORE_CTX *ctx);
X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(const X509_STORE_CTX *ctx);
X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(const X509_STORE_CTX *ctx);
X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(const X509_STORE_CTX *ctx);
X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(const X509_STORE_CTX *ctx);
X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(const X509_STORE_CTX *ctx);
X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(const X509_STORE_CTX *ctx);
#ifndef OPENSSL_NO_DEPRECATED_1_1_0
#define X509_STORE_CTX_get_chain X509_STORE_CTX_get0_chain
#define X509_STORE_CTX_set_chain X509_STORE_CTX_set0_untrusted
#define X509_STORE_CTX_trusted_stack X509_STORE_CTX_set0_trusted_stack
#define X509_STORE_get_by_subject X509_STORE_CTX_get_by_subject
#define X509_STORE_get1_certs X509_STORE_CTX_get1_certs
#define X509_STORE_get1_crls X509_STORE_CTX_get1_crls
/* the following macro is misspelled; use X509_STORE_get1_certs instead */
#define X509_STORE_get1_cert X509_STORE_CTX_get1_certs
/* the following macro is misspelled; use X509_STORE_get1_crls instead */
#define X509_STORE_get1_crl X509_STORE_CTX_get1_crls
#endif
X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *xs, X509_LOOKUP_METHOD *m);
X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void);
X509_LOOKUP_METHOD *X509_LOOKUP_file(void);
X509_LOOKUP_METHOD *X509_LOOKUP_store(void);
typedef int (*X509_LOOKUP_ctrl_fn)(X509_LOOKUP *ctx, int cmd, const char *argc,
long argl, char **ret);
typedef int (*X509_LOOKUP_ctrl_ex_fn)(
X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret,
OSSL_LIB_CTX *libctx, const char *propq);
typedef int (*X509_LOOKUP_get_by_subject_fn)(X509_LOOKUP *ctx,
X509_LOOKUP_TYPE type,
const X509_NAME *name,
X509_OBJECT *ret);
typedef int (*X509_LOOKUP_get_by_subject_ex_fn)(X509_LOOKUP *ctx,
X509_LOOKUP_TYPE type,
const X509_NAME *name,
X509_OBJECT *ret,
OSSL_LIB_CTX *libctx,
const char *propq);
typedef int (*X509_LOOKUP_get_by_issuer_serial_fn)(X509_LOOKUP *ctx,
X509_LOOKUP_TYPE type,
const X509_NAME *name,
const ASN1_INTEGER *serial,
X509_OBJECT *ret);
typedef int (*X509_LOOKUP_get_by_fingerprint_fn)(X509_LOOKUP *ctx,
X509_LOOKUP_TYPE type,
const unsigned char *bytes,
int len,
X509_OBJECT *ret);
typedef int (*X509_LOOKUP_get_by_alias_fn)(X509_LOOKUP *ctx,
X509_LOOKUP_TYPE type,
const char *str,
int len,
X509_OBJECT *ret);
X509_LOOKUP_METHOD *X509_LOOKUP_meth_new(const char *name);
void X509_LOOKUP_meth_free(X509_LOOKUP_METHOD *method);
int X509_LOOKUP_meth_set_new_item(X509_LOOKUP_METHOD *method,
int (*new_item)(X509_LOOKUP *ctx));
int (*X509_LOOKUP_meth_get_new_item(const X509_LOOKUP_METHOD *method))(X509_LOOKUP *ctx);
int X509_LOOKUP_meth_set_free(X509_LOOKUP_METHOD *method,
void (*free_fn)(X509_LOOKUP *ctx));
void (*X509_LOOKUP_meth_get_free(const X509_LOOKUP_METHOD *method))(X509_LOOKUP *ctx);
int X509_LOOKUP_meth_set_init(X509_LOOKUP_METHOD *method,
int (*init)(X509_LOOKUP *ctx));
int (*X509_LOOKUP_meth_get_init(const X509_LOOKUP_METHOD *method))(X509_LOOKUP *ctx);
int X509_LOOKUP_meth_set_shutdown(X509_LOOKUP_METHOD *method,
int (*shutdown)(X509_LOOKUP *ctx));
int (*X509_LOOKUP_meth_get_shutdown(const X509_LOOKUP_METHOD *method))(X509_LOOKUP *ctx);
int X509_LOOKUP_meth_set_ctrl(X509_LOOKUP_METHOD *method,
X509_LOOKUP_ctrl_fn ctrl_fn);
X509_LOOKUP_ctrl_fn X509_LOOKUP_meth_get_ctrl(const X509_LOOKUP_METHOD *method);
int X509_LOOKUP_meth_set_get_by_subject(X509_LOOKUP_METHOD *method,
X509_LOOKUP_get_by_subject_fn fn);
X509_LOOKUP_get_by_subject_fn X509_LOOKUP_meth_get_get_by_subject(
const X509_LOOKUP_METHOD *method);
int X509_LOOKUP_meth_set_get_by_issuer_serial(X509_LOOKUP_METHOD *method,
X509_LOOKUP_get_by_issuer_serial_fn fn);
X509_LOOKUP_get_by_issuer_serial_fn X509_LOOKUP_meth_get_get_by_issuer_serial(
const X509_LOOKUP_METHOD *method);
int X509_LOOKUP_meth_set_get_by_fingerprint(X509_LOOKUP_METHOD *method,
X509_LOOKUP_get_by_fingerprint_fn fn);
X509_LOOKUP_get_by_fingerprint_fn X509_LOOKUP_meth_get_get_by_fingerprint(
const X509_LOOKUP_METHOD *method);
int X509_LOOKUP_meth_set_get_by_alias(X509_LOOKUP_METHOD *method,
X509_LOOKUP_get_by_alias_fn fn);
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_crl(X509_STORE *xs, X509_CRL *x);
int X509_STORE_CTX_get_by_subject(const X509_STORE_CTX *vs,
X509_LOOKUP_TYPE type,
const X509_NAME *name, X509_OBJECT *ret);
X509_OBJECT *X509_STORE_CTX_get_obj_by_subject(X509_STORE_CTX *vs,
X509_LOOKUP_TYPE type,
const X509_NAME *name);
int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc,
long argl, char **ret);
int X509_LOOKUP_ctrl_ex(X509_LOOKUP *ctx, int cmd, const char *argc, long argl,
char **ret, OSSL_LIB_CTX *libctx, const char *propq);
int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type);
int X509_load_cert_file_ex(X509_LOOKUP *ctx, const char *file, int type,
OSSL_LIB_CTX *libctx, const char *propq);
int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type);
int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type);
int X509_load_cert_crl_file_ex(X509_LOOKUP *ctx, const char *file, int type,
OSSL_LIB_CTX *libctx, const char *propq);
X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method);
void X509_LOOKUP_free(X509_LOOKUP *ctx);
int X509_LOOKUP_init(X509_LOOKUP *ctx);
int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type,
const X509_NAME *name, X509_OBJECT *ret);
int X509_LOOKUP_by_subject_ex(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type,
const X509_NAME *name, X509_OBJECT *ret,
OSSL_LIB_CTX *libctx, const char *propq);
int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type,
const X509_NAME *name,
const ASN1_INTEGER *serial,
X509_OBJECT *ret);
int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type,
const unsigned char *bytes, int len,
X509_OBJECT *ret);
int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type,
const char *str, int len, X509_OBJECT *ret);
int X509_LOOKUP_set_method_data(X509_LOOKUP *ctx, void *data);
void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx);
X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx);
int X509_LOOKUP_shutdown(X509_LOOKUP *ctx);
int X509_STORE_load_file(X509_STORE *xs, const char *file);
int X509_STORE_load_path(X509_STORE *xs, const char *path);
int X509_STORE_load_store(X509_STORE *xs, const char *store);
int X509_STORE_load_locations(X509_STORE *s, const char *file, const char *dir);
int X509_STORE_set_default_paths(X509_STORE *xs);
int X509_STORE_load_file_ex(X509_STORE *xs, const char *file,
OSSL_LIB_CTX *libctx, const char *propq);
int X509_STORE_load_store_ex(X509_STORE *xs, const char *store,
OSSL_LIB_CTX *libctx, const char *propq);
int X509_STORE_load_locations_ex(X509_STORE *xs,
const char *file, const char *dir,
OSSL_LIB_CTX *libctx, const char *propq);
int X509_STORE_set_default_paths_ex(X509_STORE *xs,
OSSL_LIB_CTX *libctx, const char *propq);
#define X509_STORE_CTX_get_ex_new_index(l, p, newf, dupf, freef) \
CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE_CTX, l, p, newf, dupf, freef)
int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data);
void *X509_STORE_CTX_get_ex_data(const X509_STORE_CTX *ctx, int idx);
int X509_STORE_CTX_get_error(const X509_STORE_CTX *ctx);
void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s);
int X509_STORE_CTX_get_error_depth(const X509_STORE_CTX *ctx);
void X509_STORE_CTX_set_error_depth(X509_STORE_CTX *ctx, int depth);
X509 *X509_STORE_CTX_get_current_cert(const X509_STORE_CTX *ctx);
void X509_STORE_CTX_set_current_cert(X509_STORE_CTX *ctx, X509 *x);
X509 *X509_STORE_CTX_get0_current_issuer(const X509_STORE_CTX *ctx);
X509_CRL *X509_STORE_CTX_get0_current_crl(const X509_STORE_CTX *ctx);
X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(const X509_STORE_CTX *ctx);
STACK_OF(X509) *X509_STORE_CTX_get0_chain(const X509_STORE_CTX *ctx);
STACK_OF(X509) *X509_STORE_CTX_get1_chain(const X509_STORE_CTX *ctx);
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);
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,
int purpose, int trust);
void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags);
void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags,
time_t t);
void X509_STORE_CTX_set_current_reasons(X509_STORE_CTX *ctx,
unsigned int current_reasons);
X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(const X509_STORE_CTX *ctx);
int X509_STORE_CTX_get_explicit_policy(const X509_STORE_CTX *ctx);
int X509_STORE_CTX_get_num_untrusted(const X509_STORE_CTX *ctx);
X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(const X509_STORE_CTX *ctx);
void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param);
int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name);
/*
* Bridge opacity barrier between libcrypt and libssl, also needed to support
* offline testing in test/danetest.c
*/
void X509_STORE_CTX_set0_dane(X509_STORE_CTX *ctx, SSL_DANE *dane);
#define DANE_FLAG_NO_DANE_EE_NAMECHECKS (1L << 0)
/* X509_VERIFY_PARAM functions */
X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void);
void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param);
int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *to,
const X509_VERIFY_PARAM *from);
int X509_VERIFY_PARAM_set1(X509_VERIFY_PARAM *to,
const X509_VERIFY_PARAM *from);
int X509_VERIFY_PARAM_set1_name(X509_VERIFY_PARAM *param, const char *name);
int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param,
unsigned long flags);
int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param,
unsigned long flags);
unsigned long X509_VERIFY_PARAM_get_flags(const X509_VERIFY_PARAM *param);
int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose);
int X509_VERIFY_PARAM_get_purpose(const X509_VERIFY_PARAM *param);
int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust);
void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth);
void X509_VERIFY_PARAM_set_auth_level(X509_VERIFY_PARAM *param, int auth_level);
time_t X509_VERIFY_PARAM_get_time(const X509_VERIFY_PARAM *param);
void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t);
int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param,
ASN1_OBJECT *policy);
int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param,
STACK_OF(ASN1_OBJECT) *policies);
int X509_VERIFY_PARAM_set_inh_flags(X509_VERIFY_PARAM *param,
uint32_t flags);
uint32_t X509_VERIFY_PARAM_get_inh_flags(const X509_VERIFY_PARAM *param);
char *X509_VERIFY_PARAM_get0_host(X509_VERIFY_PARAM *param, int idx);
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_set_hostflags(X509_VERIFY_PARAM *param,
unsigned int flags);
unsigned int X509_VERIFY_PARAM_get_hostflags(const X509_VERIFY_PARAM *param);
char *X509_VERIFY_PARAM_get0_peername(const X509_VERIFY_PARAM *param);
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);
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);
int X509_VERIFY_PARAM_set1_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);
const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param);
int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param);
int X509_VERIFY_PARAM_get_count(void);
const X509_VERIFY_PARAM *X509_VERIFY_PARAM_get0(int id);
const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name);
void X509_VERIFY_PARAM_table_cleanup(void);
/* Non positive return values are errors */
#define X509_PCY_TREE_FAILURE -2 /* Failure to satisfy explicit policy */
#define X509_PCY_TREE_INVALID -1 /* Inconsistent or invalid extensions */
#define X509_PCY_TREE_INTERNAL 0 /* Internal error, most likely malloc */
/*
* Positive return values form a bit mask, all but the first are internal to
* the library and don't appear in results from X509_policy_check().
*/
#define X509_PCY_TREE_VALID 1 /* The policy tree is valid */
#define X509_PCY_TREE_EMPTY 2 /* The policy tree is empty */
#define X509_PCY_TREE_EXPLICIT 4 /* Explicit policy required */
int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy,
STACK_OF(X509) *certs,
STACK_OF(ASN1_OBJECT) *policy_oids, unsigned int flags);
void X509_policy_tree_free(X509_POLICY_TREE *tree);
int X509_policy_tree_level_count(const X509_POLICY_TREE *tree);
X509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree,
int i);
STACK_OF(X509_POLICY_NODE)
*X509_policy_tree_get0_policies(const X509_POLICY_TREE *tree);
STACK_OF(X509_POLICY_NODE)
*X509_policy_tree_get0_user_policies(const X509_POLICY_TREE *tree);
int X509_policy_level_node_count(X509_POLICY_LEVEL *level);
X509_POLICY_NODE *X509_policy_level_get0_node(const X509_POLICY_LEVEL *level,
int i);
const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node);
STACK_OF(POLICYQUALINFO)
*X509_policy_node_get0_qualifiers(const X509_POLICY_NODE *node);
const X509_POLICY_NODE *X509_policy_node_get0_parent(const X509_POLICY_NODE *node);
#ifdef __cplusplus
}
#endif
#endif
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,125 @@
/*
* WARNING: do not edit!
* Generated by apps/progs.pl
*
* 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
*/
#include "function.h"
extern int asn1parse_main(int argc, char *argv[]);
extern int ca_main(int argc, char *argv[]);
extern int ciphers_main(int argc, char *argv[]);
extern int cmp_main(int argc, char *argv[]);
extern int cms_main(int argc, char *argv[]);
extern int crl_main(int argc, char *argv[]);
extern int crl2pkcs7_main(int argc, char *argv[]);
extern int dgst_main(int argc, char *argv[]);
extern int dhparam_main(int argc, char *argv[]);
extern int dsa_main(int argc, char *argv[]);
extern int dsaparam_main(int argc, char *argv[]);
extern int ec_main(int argc, char *argv[]);
extern int ecparam_main(int argc, char *argv[]);
extern int enc_main(int argc, char *argv[]);
extern int engine_main(int argc, char *argv[]);
extern int errstr_main(int argc, char *argv[]);
extern int fipsinstall_main(int argc, char *argv[]);
extern int gendsa_main(int argc, char *argv[]);
extern int genpkey_main(int argc, char *argv[]);
extern int genrsa_main(int argc, char *argv[]);
extern int help_main(int argc, char *argv[]);
extern int info_main(int argc, char *argv[]);
extern int kdf_main(int argc, char *argv[]);
extern int list_main(int argc, char *argv[]);
extern int mac_main(int argc, char *argv[]);
extern int nseq_main(int argc, char *argv[]);
extern int ocsp_main(int argc, char *argv[]);
extern int passwd_main(int argc, char *argv[]);
extern int pkcs12_main(int argc, char *argv[]);
extern int pkcs7_main(int argc, char *argv[]);
extern int pkcs8_main(int argc, char *argv[]);
extern int pkey_main(int argc, char *argv[]);
extern int pkeyparam_main(int argc, char *argv[]);
extern int pkeyutl_main(int argc, char *argv[]);
extern int prime_main(int argc, char *argv[]);
extern int rand_main(int argc, char *argv[]);
extern int rehash_main(int argc, char *argv[]);
extern int req_main(int argc, char *argv[]);
extern int rsa_main(int argc, char *argv[]);
extern int rsautl_main(int argc, char *argv[]);
extern int s_client_main(int argc, char *argv[]);
extern int s_server_main(int argc, char *argv[]);
extern int s_time_main(int argc, char *argv[]);
extern int sess_id_main(int argc, char *argv[]);
extern int skeyutl_main(int argc, char *argv[]);
extern int smime_main(int argc, char *argv[]);
extern int speed_main(int argc, char *argv[]);
extern int spkac_main(int argc, char *argv[]);
extern int srp_main(int argc, char *argv[]);
extern int storeutl_main(int argc, char *argv[]);
extern int ts_main(int argc, char *argv[]);
extern int verify_main(int argc, char *argv[]);
extern int version_main(int argc, char *argv[]);
extern int x509_main(int argc, char *argv[]);
extern const OPTIONS asn1parse_options[];
extern const OPTIONS ca_options[];
extern const OPTIONS ciphers_options[];
extern const OPTIONS cmp_options[];
extern const OPTIONS cms_options[];
extern const OPTIONS crl_options[];
extern const OPTIONS crl2pkcs7_options[];
extern const OPTIONS dgst_options[];
extern const OPTIONS dhparam_options[];
extern const OPTIONS dsa_options[];
extern const OPTIONS dsaparam_options[];
extern const OPTIONS ec_options[];
extern const OPTIONS ecparam_options[];
extern const OPTIONS enc_options[];
extern const OPTIONS engine_options[];
extern const OPTIONS errstr_options[];
extern const OPTIONS fipsinstall_options[];
extern const OPTIONS gendsa_options[];
extern const OPTIONS genpkey_options[];
extern const OPTIONS genrsa_options[];
extern const OPTIONS help_options[];
extern const OPTIONS info_options[];
extern const OPTIONS kdf_options[];
extern const OPTIONS list_options[];
extern const OPTIONS mac_options[];
extern const OPTIONS nseq_options[];
extern const OPTIONS ocsp_options[];
extern const OPTIONS passwd_options[];
extern const OPTIONS pkcs12_options[];
extern const OPTIONS pkcs7_options[];
extern const OPTIONS pkcs8_options[];
extern const OPTIONS pkey_options[];
extern const OPTIONS pkeyparam_options[];
extern const OPTIONS pkeyutl_options[];
extern const OPTIONS prime_options[];
extern const OPTIONS rand_options[];
extern const OPTIONS rehash_options[];
extern const OPTIONS req_options[];
extern const OPTIONS rsa_options[];
extern const OPTIONS rsautl_options[];
extern const OPTIONS s_client_options[];
extern const OPTIONS s_server_options[];
extern const OPTIONS s_time_options[];
extern const OPTIONS sess_id_options[];
extern const OPTIONS skeyutl_options[];
extern const OPTIONS smime_options[];
extern const OPTIONS speed_options[];
extern const OPTIONS spkac_options[];
extern const OPTIONS srp_options[];
extern const OPTIONS storeutl_options[];
extern const OPTIONS ts_options[];
extern const OPTIONS verify_options[];
extern const OPTIONS version_options[];
extern const OPTIONS x509_options[];
extern FUNCTION functions[];
@@ -0,0 +1,116 @@
{
'variables': {
'openssl_defines_linux64-riscv64': [
'NDEBUG',
'OPENSSL_USE_NODELETE',
'OPENSSL_BUILDING_OPENSSL',
'BROTLI',
'ZLIB',
'ZSTD',
'AES_ASM',
'GHASH_ASM',
'INCLUDE_C_CHACHA20',
'INCLUDE_C_SHA256',
'INCLUDE_C_SHA512',
'OPENSSL_CPUID_OBJ',
'OPENSSL_SM3_ASM',
'SHA256_ASM',
'SHA512_ASM',
'SM4_ASM',
'OPENSSL_PIC',
],
'openssl_cflags_linux64-riscv64': [
'-Wa,--noexecstack',
'-Wall -O3',
'-pthread',
'-Wall -O3',
],
'openssl_ex_libs_linux64-riscv64': [
'-lm -ldl -pthread',
],
'openssl_cli_srcs_linux64-riscv64': [
'openssl/apps/lib/cmp_mock_srv.c',
'openssl/apps/asn1parse.c',
'openssl/apps/ca.c',
'openssl/apps/ciphers.c',
'openssl/apps/cmp.c',
'openssl/apps/cms.c',
'openssl/apps/crl.c',
'openssl/apps/crl2pkcs7.c',
'openssl/apps/dgst.c',
'openssl/apps/dhparam.c',
'openssl/apps/dsa.c',
'openssl/apps/dsaparam.c',
'openssl/apps/ec.c',
'openssl/apps/ecparam.c',
'openssl/apps/enc.c',
'openssl/apps/engine.c',
'openssl/apps/errstr.c',
'openssl/apps/fipsinstall.c',
'openssl/apps/gendsa.c',
'openssl/apps/genpkey.c',
'openssl/apps/genrsa.c',
'openssl/apps/info.c',
'openssl/apps/kdf.c',
'openssl/apps/list.c',
'openssl/apps/mac.c',
'openssl/apps/nseq.c',
'openssl/apps/ocsp.c',
'openssl/apps/openssl.c',
'openssl/apps/passwd.c',
'openssl/apps/pkcs12.c',
'openssl/apps/pkcs7.c',
'openssl/apps/pkcs8.c',
'openssl/apps/pkey.c',
'openssl/apps/pkeyparam.c',
'openssl/apps/pkeyutl.c',
'openssl/apps/prime.c',
'./config/archs/linux64-riscv64/asm/apps/progs.c',
'openssl/apps/rand.c',
'openssl/apps/rehash.c',
'openssl/apps/req.c',
'openssl/apps/rsa.c',
'openssl/apps/rsautl.c',
'openssl/apps/s_client.c',
'openssl/apps/s_server.c',
'openssl/apps/s_time.c',
'openssl/apps/sess_id.c',
'openssl/apps/skeyutl.c',
'openssl/apps/smime.c',
'openssl/apps/speed.c',
'openssl/apps/spkac.c',
'openssl/apps/srp.c',
'openssl/apps/storeutl.c',
'openssl/apps/ts.c',
'openssl/apps/verify.c',
'openssl/apps/version.c',
'openssl/apps/x509.c',
'openssl/apps/lib/app_libctx.c',
'openssl/apps/lib/app_params.c',
'openssl/apps/lib/app_provider.c',
'openssl/apps/lib/app_rand.c',
'openssl/apps/lib/app_x509.c',
'openssl/apps/lib/apps.c',
'openssl/apps/lib/apps_opt_printf.c',
'openssl/apps/lib/apps_ui.c',
'openssl/apps/lib/columns.c',
'openssl/apps/lib/engine.c',
'openssl/apps/lib/engine_loader.c',
'openssl/apps/lib/fmt.c',
'openssl/apps/lib/http_server.c',
'openssl/apps/lib/log.c',
'openssl/apps/lib/names.c',
'openssl/apps/lib/opt.c',
'openssl/apps/lib/s_cb.c',
'openssl/apps/lib/s_socket.c',
'openssl/apps/lib/tlssrp_depr.c',
],
},
'defines': ['<@(openssl_defines_linux64-riscv64)'],
'include_dirs': [
'./include',
],
'cflags' : ['<@(openssl_cflags_linux64-riscv64)'],
'libraries': ['<@(openssl_ex_libs_linux64-riscv64)'],
'sources': ['<@(openssl_cli_srcs_linux64-riscv64)'],
}
@@ -0,0 +1,393 @@
{
'variables': {
'openssl_sources': [
'openssl/crypto/aes/aes_cbc.c',
'openssl/crypto/aes/aes_ecb.c',
'openssl/crypto/aes/aes_misc.c',
'openssl/crypto/bn/bn_add.c',
'openssl/crypto/bn/bn_asm.c',
'openssl/crypto/bn/bn_blind.c',
'openssl/crypto/bn/bn_const.c',
'openssl/crypto/bn/bn_conv.c',
'openssl/crypto/bn/bn_ctx.c',
'openssl/crypto/bn/bn_dh.c',
'openssl/crypto/bn/bn_div.c',
'openssl/crypto/bn/bn_exp.c',
'openssl/crypto/bn/bn_exp2.c',
'openssl/crypto/bn/bn_gcd.c',
'openssl/crypto/bn/bn_gf2m.c',
'openssl/crypto/bn/bn_intern.c',
'openssl/crypto/bn/bn_kron.c',
'openssl/crypto/bn/bn_lib.c',
'openssl/crypto/bn/bn_mod.c',
'openssl/crypto/bn/bn_mont.c',
'openssl/crypto/bn/bn_mpi.c',
'openssl/crypto/bn/bn_mul.c',
'openssl/crypto/bn/bn_nist.c',
'openssl/crypto/bn/bn_prime.c',
'openssl/crypto/bn/bn_rand.c',
'openssl/crypto/bn/bn_recp.c',
'openssl/crypto/bn/bn_rsa_fips186_4.c',
'openssl/crypto/bn/bn_shift.c',
'openssl/crypto/bn/bn_sqr.c',
'openssl/crypto/bn/bn_sqrt.c',
'openssl/crypto/bn/bn_word.c',
'openssl/crypto/buffer/buffer.c',
'openssl/crypto/cmac/cmac.c',
'openssl/crypto/des/des_enc.c',
'openssl/crypto/des/ecb3_enc.c',
'openssl/crypto/des/fcrypt_b.c',
'openssl/crypto/des/set_key.c',
'openssl/crypto/dh/dh_backend.c',
'openssl/crypto/dh/dh_check.c',
'openssl/crypto/dh/dh_gen.c',
'openssl/crypto/dh/dh_group_params.c',
'openssl/crypto/dh/dh_kdf.c',
'openssl/crypto/dh/dh_key.c',
'openssl/crypto/dh/dh_lib.c',
'openssl/crypto/dsa/dsa_backend.c',
'openssl/crypto/dsa/dsa_check.c',
'openssl/crypto/dsa/dsa_gen.c',
'openssl/crypto/dsa/dsa_key.c',
'openssl/crypto/dsa/dsa_lib.c',
'openssl/crypto/dsa/dsa_ossl.c',
'openssl/crypto/dsa/dsa_sign.c',
'openssl/crypto/dsa/dsa_vrf.c',
'openssl/crypto/ec/curve448/arch_32/f_impl32.c',
'openssl/crypto/ec/curve448/arch_64/f_impl64.c',
'openssl/crypto/ec/curve448/curve448.c',
'openssl/crypto/ec/curve448/curve448_tables.c',
'openssl/crypto/ec/curve448/eddsa.c',
'openssl/crypto/ec/curve448/f_generic.c',
'openssl/crypto/ec/curve448/scalar.c',
'openssl/crypto/ec/curve25519.c',
'openssl/crypto/ec/ec2_oct.c',
'openssl/crypto/ec/ec2_smpl.c',
'openssl/crypto/ec/ec_asn1.c',
'openssl/crypto/ec/ec_backend.c',
'openssl/crypto/ec/ec_check.c',
'openssl/crypto/ec/ec_curve.c',
'openssl/crypto/ec/ec_cvt.c',
'openssl/crypto/ec/ec_key.c',
'openssl/crypto/ec/ec_kmeth.c',
'openssl/crypto/ec/ec_lib.c',
'openssl/crypto/ec/ec_mult.c',
'openssl/crypto/ec/ec_oct.c',
'openssl/crypto/ec/ecdh_kdf.c',
'openssl/crypto/ec/ecdh_ossl.c',
'openssl/crypto/ec/ecdsa_ossl.c',
'openssl/crypto/ec/ecdsa_sign.c',
'openssl/crypto/ec/ecdsa_vrf.c',
'openssl/crypto/ec/ecp_mont.c',
'openssl/crypto/ec/ecp_nist.c',
'openssl/crypto/ec/ecp_oct.c',
'openssl/crypto/ec/ecp_smpl.c',
'openssl/crypto/ec/ecx_backend.c',
'openssl/crypto/ec/ecx_key.c',
'openssl/crypto/evp/asymcipher.c',
'openssl/crypto/evp/dh_support.c',
'openssl/crypto/evp/digest.c',
'openssl/crypto/evp/ec_support.c',
'openssl/crypto/evp/evp_enc.c',
'openssl/crypto/evp/evp_fetch.c',
'openssl/crypto/evp/evp_lib.c',
'openssl/crypto/evp/evp_rand.c',
'openssl/crypto/evp/evp_utils.c',
'openssl/crypto/evp/exchange.c',
'openssl/crypto/evp/kdf_lib.c',
'openssl/crypto/evp/kdf_meth.c',
'openssl/crypto/evp/kem.c',
'openssl/crypto/evp/keymgmt_lib.c',
'openssl/crypto/evp/keymgmt_meth.c',
'openssl/crypto/evp/mac_lib.c',
'openssl/crypto/evp/mac_meth.c',
'openssl/crypto/evp/p_lib.c',
'openssl/crypto/evp/pmeth_check.c',
'openssl/crypto/evp/pmeth_gn.c',
'openssl/crypto/evp/pmeth_lib.c',
'openssl/crypto/evp/s_lib.c',
'openssl/crypto/evp/signature.c',
'openssl/crypto/evp/skeymgmt_meth.c',
'openssl/crypto/ffc/ffc_backend.c',
'openssl/crypto/ffc/ffc_dh.c',
'openssl/crypto/ffc/ffc_key_generate.c',
'openssl/crypto/ffc/ffc_key_validate.c',
'openssl/crypto/ffc/ffc_params.c',
'openssl/crypto/ffc/ffc_params_generate.c',
'openssl/crypto/ffc/ffc_params_validate.c',
'openssl/crypto/hashtable/hashfunc.c',
'openssl/crypto/hashtable/hashtable.c',
'openssl/crypto/hmac/hmac.c',
'openssl/crypto/lhash/lhash.c',
'openssl/crypto/asn1_dsa.c',
'openssl/crypto/bsearch.c',
'openssl/crypto/context.c',
'openssl/crypto/core_algorithm.c',
'openssl/crypto/core_fetch.c',
'openssl/crypto/core_namemap.c',
'openssl/crypto/cpuid.c',
'openssl/crypto/cryptlib.c',
'openssl/crypto/ctype.c',
'openssl/crypto/der_writer.c',
'openssl/crypto/ex_data.c',
'openssl/crypto/initthread.c',
'openssl/crypto/o_str.c',
'openssl/crypto/packet.c',
'openssl/crypto/param_build.c',
'openssl/crypto/param_build_set.c',
'openssl/crypto/params.c',
'openssl/crypto/params_dup.c',
'openssl/crypto/params_from_text.c',
'openssl/crypto/provider_core.c',
'openssl/crypto/provider_predefined.c',
'openssl/crypto/riscvcap.c',
'openssl/crypto/self_test_core.c',
'openssl/crypto/sparse_array.c',
'openssl/crypto/threads_lib.c',
'openssl/crypto/threads_none.c',
'openssl/crypto/threads_pthread.c',
'openssl/crypto/threads_win.c',
'openssl/crypto/time.c',
'openssl/crypto/ml_dsa/ml_dsa_encoders.c',
'openssl/crypto/ml_dsa/ml_dsa_key.c',
'openssl/crypto/ml_dsa/ml_dsa_key_compress.c',
'openssl/crypto/ml_dsa/ml_dsa_matrix.c',
'openssl/crypto/ml_dsa/ml_dsa_ntt.c',
'openssl/crypto/ml_dsa/ml_dsa_params.c',
'openssl/crypto/ml_dsa/ml_dsa_sample.c',
'openssl/crypto/ml_dsa/ml_dsa_sign.c',
'openssl/crypto/ml_kem/ml_kem.c',
'openssl/crypto/modes/cbc128.c',
'openssl/crypto/modes/ccm128.c',
'openssl/crypto/modes/cfb128.c',
'openssl/crypto/modes/ctr128.c',
'openssl/crypto/modes/gcm128.c',
'openssl/crypto/modes/ofb128.c',
'openssl/crypto/modes/wrap128.c',
'openssl/crypto/modes/xts128.c',
'openssl/crypto/modes/xts128gb.c',
'openssl/crypto/property/defn_cache.c',
'openssl/crypto/property/property.c',
'openssl/crypto/property/property_parse.c',
'openssl/crypto/property/property_query.c',
'openssl/crypto/property/property_string.c',
'openssl/crypto/rand/rand_lib.c',
'openssl/crypto/rsa/rsa_acvp_test_params.c',
'openssl/crypto/rsa/rsa_backend.c',
'openssl/crypto/rsa/rsa_chk.c',
'openssl/crypto/rsa/rsa_crpt.c',
'openssl/crypto/rsa/rsa_gen.c',
'openssl/crypto/rsa/rsa_lib.c',
'openssl/crypto/rsa/rsa_mp_names.c',
'openssl/crypto/rsa/rsa_none.c',
'openssl/crypto/rsa/rsa_oaep.c',
'openssl/crypto/rsa/rsa_ossl.c',
'openssl/crypto/rsa/rsa_pk1.c',
'openssl/crypto/rsa/rsa_pss.c',
'openssl/crypto/rsa/rsa_schemes.c',
'openssl/crypto/rsa/rsa_sign.c',
'openssl/crypto/rsa/rsa_sp800_56b_check.c',
'openssl/crypto/rsa/rsa_sp800_56b_gen.c',
'openssl/crypto/rsa/rsa_x931.c',
'openssl/crypto/sha/keccak1600.c',
'openssl/crypto/sha/sha1dgst.c',
'openssl/crypto/sha/sha256.c',
'openssl/crypto/sha/sha3.c',
'openssl/crypto/sha/sha512.c',
'openssl/crypto/sha/sha_riscv.c',
'openssl/crypto/slh_dsa/slh_adrs.c',
'openssl/crypto/slh_dsa/slh_dsa.c',
'openssl/crypto/slh_dsa/slh_dsa_hash_ctx.c',
'openssl/crypto/slh_dsa/slh_dsa_key.c',
'openssl/crypto/slh_dsa/slh_fors.c',
'openssl/crypto/slh_dsa/slh_hash.c',
'openssl/crypto/slh_dsa/slh_hypertree.c',
'openssl/crypto/slh_dsa/slh_params.c',
'openssl/crypto/slh_dsa/slh_wots.c',
'openssl/crypto/slh_dsa/slh_xmss.c',
'openssl/crypto/stack/stack.c',
'openssl/crypto/thread/arch/thread_none.c',
'openssl/crypto/thread/arch/thread_posix.c',
'openssl/crypto/thread/arch/thread_win.c',
'openssl/crypto/thread/api.c',
'openssl/crypto/thread/arch.c',
'openssl/crypto/thread/internal.c',
'openssl/providers/common/der/der_rsa_sig.c',
'openssl/providers/common/bio_prov.c',
'openssl/providers/common/capabilities.c',
'openssl/providers/common/digest_to_nid.c',
'openssl/providers/common/provider_seeding.c',
'openssl/providers/common/provider_util.c',
'openssl/providers/common/securitycheck.c',
'openssl/providers/common/securitycheck_fips.c',
'openssl/providers/fips/fipsindicator.c',
'openssl/providers/fips/fipsprov.c',
'openssl/providers/fips/self_test.c',
'openssl/providers/fips/self_test_kats.c',
'openssl/providers/implementations/asymciphers/rsa_enc.c',
'openssl/providers/implementations/ciphers/cipher_aes.c',
'openssl/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha.c',
'openssl/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha1_hw.c',
'openssl/providers/implementations/ciphers/cipher_aes_cbc_hmac_sha256_hw.c',
'openssl/providers/implementations/ciphers/cipher_aes_ccm.c',
'openssl/providers/implementations/ciphers/cipher_aes_ccm_hw.c',
'openssl/providers/implementations/ciphers/cipher_aes_gcm.c',
'openssl/providers/implementations/ciphers/cipher_aes_gcm_hw.c',
'openssl/providers/implementations/ciphers/cipher_aes_hw.c',
'openssl/providers/implementations/ciphers/cipher_aes_ocb.c',
'openssl/providers/implementations/ciphers/cipher_aes_ocb_hw.c',
'openssl/providers/implementations/ciphers/cipher_aes_wrp.c',
'openssl/providers/implementations/ciphers/cipher_aes_xts.c',
'openssl/providers/implementations/ciphers/cipher_aes_xts_fips.c',
'openssl/providers/implementations/ciphers/cipher_aes_xts_hw.c',
'openssl/providers/implementations/ciphers/cipher_cts.c',
'openssl/providers/implementations/ciphers/cipher_tdes.c',
'openssl/providers/implementations/ciphers/cipher_tdes_common.c',
'openssl/providers/implementations/ciphers/cipher_tdes_hw.c',
'openssl/providers/implementations/digests/sha2_prov.c',
'openssl/providers/implementations/digests/sha3_prov.c',
'openssl/providers/implementations/exchange/dh_exch.c',
'openssl/providers/implementations/exchange/ecdh_exch.c',
'openssl/providers/implementations/exchange/ecx_exch.c',
'openssl/providers/implementations/exchange/kdf_exch.c',
'openssl/providers/implementations/kdfs/hkdf.c',
'openssl/providers/implementations/kdfs/kbkdf.c',
'openssl/providers/implementations/kdfs/pbkdf2.c',
'openssl/providers/implementations/kdfs/pbkdf2_fips.c',
'openssl/providers/implementations/kdfs/sshkdf.c',
'openssl/providers/implementations/kdfs/sskdf.c',
'openssl/providers/implementations/kdfs/tls1_prf.c',
'openssl/providers/implementations/kdfs/x942kdf.c',
'openssl/providers/implementations/kem/ml_kem_kem.c',
'openssl/providers/implementations/kem/mlx_kem.c',
'openssl/providers/implementations/kem/rsa_kem.c',
'openssl/providers/implementations/keymgmt/dh_kmgmt.c',
'openssl/providers/implementations/keymgmt/dsa_kmgmt.c',
'openssl/providers/implementations/keymgmt/ec_kmgmt.c',
'openssl/providers/implementations/keymgmt/ecx_kmgmt.c',
'openssl/providers/implementations/keymgmt/kdf_legacy_kmgmt.c',
'openssl/providers/implementations/keymgmt/mac_legacy_kmgmt.c',
'openssl/providers/implementations/keymgmt/ml_dsa_kmgmt.c',
'openssl/providers/implementations/keymgmt/ml_kem_kmgmt.c',
'openssl/providers/implementations/keymgmt/mlx_kmgmt.c',
'openssl/providers/implementations/keymgmt/rsa_kmgmt.c',
'openssl/providers/implementations/keymgmt/slh_dsa_kmgmt.c',
'openssl/providers/implementations/macs/cmac_prov.c',
'openssl/providers/implementations/macs/gmac_prov.c',
'openssl/providers/implementations/macs/hmac_prov.c',
'openssl/providers/implementations/macs/kmac_prov.c',
'openssl/providers/implementations/rands/drbg.c',
'openssl/providers/implementations/rands/drbg_ctr.c',
'openssl/providers/implementations/rands/drbg_hash.c',
'openssl/providers/implementations/rands/drbg_hmac.c',
'openssl/providers/implementations/rands/fips_crng_test.c',
'openssl/providers/implementations/rands/test_rng.c',
'openssl/providers/implementations/signature/dsa_sig.c',
'openssl/providers/implementations/signature/ecdsa_sig.c',
'openssl/providers/implementations/signature/eddsa_sig.c',
'openssl/providers/implementations/signature/mac_legacy_sig.c',
'openssl/providers/implementations/signature/ml_dsa_sig.c',
'openssl/providers/implementations/signature/rsa_sig.c',
'openssl/providers/implementations/signature/slh_dsa_sig.c',
'openssl/providers/implementations/skeymgmt/aes_skmgmt.c',
'openssl/providers/implementations/skeymgmt/generic.c',
'openssl/ssl/record/methods/ssl3_cbc.c',
'openssl/providers/common/der/der_dsa_key.c',
'openssl/providers/common/der/der_dsa_sig.c',
'openssl/providers/common/der/der_ec_key.c',
'openssl/providers/common/der/der_ec_sig.c',
'openssl/providers/common/der/der_ecx_key.c',
'openssl/providers/common/der/der_ml_dsa_key.c',
'openssl/providers/common/der/der_rsa_key.c',
'openssl/providers/common/der/der_slh_dsa_key.c',
'openssl/providers/common/provider_ctx.c',
'openssl/providers/common/provider_err.c',
'openssl/providers/implementations/ciphers/ciphercommon.c',
'openssl/providers/implementations/ciphers/ciphercommon_block.c',
'openssl/providers/implementations/ciphers/ciphercommon_ccm.c',
'openssl/providers/implementations/ciphers/ciphercommon_ccm_hw.c',
'openssl/providers/implementations/ciphers/ciphercommon_gcm.c',
'openssl/providers/implementations/ciphers/ciphercommon_gcm_hw.c',
'openssl/providers/implementations/ciphers/ciphercommon_hw.c',
'openssl/providers/implementations/digests/digestcommon.c',
'openssl/ssl/record/methods/tls_pad.c',
'openssl/providers/fips/fips_entry.c',
],
'openssl_sources_linux64-riscv64': [
'./config/archs/linux64-riscv64/asm/crypto/aes/aes-riscv64-zkn.s',
'./config/archs/linux64-riscv64/asm/crypto/aes/aes-riscv64-zvbb-zvkg-zvkned.s',
'./config/archs/linux64-riscv64/asm/crypto/aes/aes-riscv64-zvkb-zvkned.s',
'./config/archs/linux64-riscv64/asm/crypto/aes/aes-riscv64-zvkned.s',
'./config/archs/linux64-riscv64/asm/crypto/aes/aes-riscv64.s',
'./config/archs/linux64-riscv64/asm/crypto/chacha/chacha-riscv64-v-zbb-zvkb.s',
'./config/archs/linux64-riscv64/asm/crypto/chacha/chacha-riscv64-v-zbb.s',
'./config/archs/linux64-riscv64/asm/crypto/params_idx.c',
'./config/archs/linux64-riscv64/asm/crypto/riscv64cpuid.s',
'./config/archs/linux64-riscv64/asm/crypto/modes/aes-gcm-riscv64-zvkb-zvkg-zvkned.s',
'./config/archs/linux64-riscv64/asm/crypto/modes/ghash-riscv64-zvkb-zvbc.s',
'./config/archs/linux64-riscv64/asm/crypto/modes/ghash-riscv64-zvkg.s',
'./config/archs/linux64-riscv64/asm/crypto/modes/ghash-riscv64.s',
'./config/archs/linux64-riscv64/asm/crypto/sha/sha256-riscv64-zvkb-zvknha_or_zvknhb.S',
'./config/archs/linux64-riscv64/asm/crypto/sha/sha512-riscv64-zvkb-zvknhb.S',
'./config/archs/linux64-riscv64/asm/crypto/sm3/sm3-riscv64-zvksh.S',
'./config/archs/linux64-riscv64/asm/crypto/sm4/sm4-riscv64-zvksed.s',
'./config/archs/linux64-riscv64/asm/providers/common/der/der_sm2_gen.c',
'./config/archs/linux64-riscv64/asm/providers/common/der/der_digests_gen.c',
'./config/archs/linux64-riscv64/asm/providers/common/der/der_dsa_gen.c',
'./config/archs/linux64-riscv64/asm/providers/common/der/der_ec_gen.c',
'./config/archs/linux64-riscv64/asm/providers/common/der/der_ecx_gen.c',
'./config/archs/linux64-riscv64/asm/providers/common/der/der_ml_dsa_gen.c',
'./config/archs/linux64-riscv64/asm/providers/common/der/der_rsa_gen.c',
'./config/archs/linux64-riscv64/asm/providers/common/der/der_slh_dsa_gen.c',
'./config/archs/linux64-riscv64/asm/providers/common/der/der_wrap_gen.c',
'./config/archs/linux64-riscv64/asm/providers/legacy.ld',
'./config/archs/linux64-riscv64/asm/providers/fips.ld',
],
'openssl_defines_linux64-riscv64': [
'NDEBUG',
'OPENSSL_USE_NODELETE',
'OPENSSL_BUILDING_OPENSSL',
'BROTLI',
'ZLIB',
'ZSTD',
'AES_ASM',
'FIPS_MODULE',
'GHASH_ASM',
'INCLUDE_C_SHA256',
'INCLUDE_C_SHA512',
'OPENSSL_CPUID_OBJ',
'SHA256_ASM',
'SHA512_ASM',
'SM4_ASM',
'FIPS_MODULE',
],
'openssl_cflags_linux64-riscv64': [
'-Wa,--noexecstack',
'-Wall -O3',
'-pthread',
'-Wall -O3',
],
'openssl_ex_libs_linux64-riscv64': [
'-lm -ldl -pthread',
],
'linker_script': '<(PRODUCT_DIR)/../../deps/openssl/config/archs/linux64-riscv64/asm/providers/fips.ld'
},
'include_dirs': [
'.',
'./include',
'./crypto',
'./crypto/include/internal',
'./providers/common/include',
],
'defines': ['<@(openssl_defines_linux64-riscv64)'],
'cflags': ['<@(openssl_cflags_linux64-riscv64)'],
'libraries': ['<@(openssl_ex_libs_linux64-riscv64)'],
'ldflags': ['-Wl,--version-script=<@(linker_script)'],
'sources': ['<@(openssl_sources)', '<@(openssl_sources_linux64-riscv64)'],
'direct_dependent_settings': {
'include_dirs': ['./include', '.'],
'defines': ['<@(openssl_defines_linux64-riscv64)'],
},
}
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,162 @@
/*
* WARNING: do not edit!
* Generated by Makefile from providers/common/der/der_digests_gen.c.in
*
* Copyright 2020-2021 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_digests.h"
/* Well known OIDs precompiled */
/* clang-format off */
/*
* sigAlgs OBJECT IDENTIFIER ::= { nistAlgorithms 3 }
*/
const unsigned char ossl_der_oid_sigAlgs[DER_OID_SZ_sigAlgs] = {
DER_OID_V_sigAlgs
};
/*
* id-sha1 OBJECT IDENTIFIER ::= { iso(1)
* identified-organization(3) oiw(14)
* secsig(3) algorithms(2) 26 }
*/
const unsigned char ossl_der_oid_id_sha1[DER_OID_SZ_id_sha1] = {
DER_OID_V_id_sha1
};
/*
* id-md2 OBJECT IDENTIFIER ::= {
* iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 2 }
*/
const unsigned char ossl_der_oid_id_md2[DER_OID_SZ_id_md2] = {
DER_OID_V_id_md2
};
/*
* id-md5 OBJECT IDENTIFIER ::= {
* iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 5 }
*/
const unsigned char ossl_der_oid_id_md5[DER_OID_SZ_id_md5] = {
DER_OID_V_id_md5
};
/*
* id-sha256 OBJECT IDENTIFIER ::= { hashAlgs 1 }
*/
const unsigned char ossl_der_oid_id_sha256[DER_OID_SZ_id_sha256] = {
DER_OID_V_id_sha256
};
/*
* id-sha384 OBJECT IDENTIFIER ::= { hashAlgs 2 }
*/
const unsigned char ossl_der_oid_id_sha384[DER_OID_SZ_id_sha384] = {
DER_OID_V_id_sha384
};
/*
* id-sha512 OBJECT IDENTIFIER ::= { hashAlgs 3 }
*/
const unsigned char ossl_der_oid_id_sha512[DER_OID_SZ_id_sha512] = {
DER_OID_V_id_sha512
};
/*
* id-sha224 OBJECT IDENTIFIER ::= { hashAlgs 4 }
*/
const unsigned char ossl_der_oid_id_sha224[DER_OID_SZ_id_sha224] = {
DER_OID_V_id_sha224
};
/*
* id-sha512-224 OBJECT IDENTIFIER ::= { hashAlgs 5 }
*/
const unsigned char ossl_der_oid_id_sha512_224[DER_OID_SZ_id_sha512_224] = {
DER_OID_V_id_sha512_224
};
/*
* id-sha512-256 OBJECT IDENTIFIER ::= { hashAlgs 6 }
*/
const unsigned char ossl_der_oid_id_sha512_256[DER_OID_SZ_id_sha512_256] = {
DER_OID_V_id_sha512_256
};
/*
* id-sha3-224 OBJECT IDENTIFIER ::= { hashAlgs 7 }
*/
const unsigned char ossl_der_oid_id_sha3_224[DER_OID_SZ_id_sha3_224] = {
DER_OID_V_id_sha3_224
};
/*
* id-sha3-256 OBJECT IDENTIFIER ::= { hashAlgs 8 }
*/
const unsigned char ossl_der_oid_id_sha3_256[DER_OID_SZ_id_sha3_256] = {
DER_OID_V_id_sha3_256
};
/*
* id-sha3-384 OBJECT IDENTIFIER ::= { hashAlgs 9 }
*/
const unsigned char ossl_der_oid_id_sha3_384[DER_OID_SZ_id_sha3_384] = {
DER_OID_V_id_sha3_384
};
/*
* id-sha3-512 OBJECT IDENTIFIER ::= { hashAlgs 10 }
*/
const unsigned char ossl_der_oid_id_sha3_512[DER_OID_SZ_id_sha3_512] = {
DER_OID_V_id_sha3_512
};
/*
* id-shake128 OBJECT IDENTIFIER ::= { hashAlgs 11 }
*/
const unsigned char ossl_der_oid_id_shake128[DER_OID_SZ_id_shake128] = {
DER_OID_V_id_shake128
};
/*
* id-shake256 OBJECT IDENTIFIER ::= { hashAlgs 12 }
*/
const unsigned char ossl_der_oid_id_shake256[DER_OID_SZ_id_shake256] = {
DER_OID_V_id_shake256
};
/*
* id-shake128-len OBJECT IDENTIFIER ::= { hashAlgs 17 }
*/
const unsigned char ossl_der_oid_id_shake128_len[DER_OID_SZ_id_shake128_len] = {
DER_OID_V_id_shake128_len
};
/*
* id-shake256-len OBJECT IDENTIFIER ::= { hashAlgs 18 }
*/
const unsigned char ossl_der_oid_id_shake256_len[DER_OID_SZ_id_shake256_len] = {
DER_OID_V_id_shake256_len
};
/*
* id-KMACWithSHAKE128 OBJECT IDENTIFIER ::={hashAlgs 19}
*/
const unsigned char ossl_der_oid_id_KMACWithSHAKE128[DER_OID_SZ_id_KMACWithSHAKE128] = {
DER_OID_V_id_KMACWithSHAKE128
};
/*
* id-KMACWithSHAKE256 OBJECT IDENTIFIER ::={ hashAlgs 20}
*/
const unsigned char ossl_der_oid_id_KMACWithSHAKE256[DER_OID_SZ_id_KMACWithSHAKE256] = {
DER_OID_V_id_KMACWithSHAKE256
};
/* clang-format on */
@@ -0,0 +1,96 @@
/*
* WARNING: do not edit!
* Generated by Makefile from providers/common/der/der_dsa_gen.c.in
*
* Copyright 2020-2021 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
*/
/*
* DSA low level APIs are deprecated for public use, but still ok for
* internal use.
*/
#include "internal/deprecated.h"
#include "prov/der_dsa.h"
/* Well known OIDs precompiled */
/* clang-format off */
/*
* id-dsa OBJECT IDENTIFIER ::= {
* iso(1) member-body(2) us(840) x9-57(10040) x9algorithm(4) 1 }
*/
const unsigned char ossl_der_oid_id_dsa[DER_OID_SZ_id_dsa] = {
DER_OID_V_id_dsa
};
/*
* id-dsa-with-sha1 OBJECT IDENTIFIER ::= {
* iso(1) member-body(2) us(840) x9-57 (10040) x9algorithm(4) 3 }
*/
const unsigned char ossl_der_oid_id_dsa_with_sha1[DER_OID_SZ_id_dsa_with_sha1] = {
DER_OID_V_id_dsa_with_sha1
};
/*
* id-dsa-with-sha224 OBJECT IDENTIFIER ::= { sigAlgs 1 }
*/
const unsigned char ossl_der_oid_id_dsa_with_sha224[DER_OID_SZ_id_dsa_with_sha224] = {
DER_OID_V_id_dsa_with_sha224
};
/*
* id-dsa-with-sha256 OBJECT IDENTIFIER ::= { sigAlgs 2 }
*/
const unsigned char ossl_der_oid_id_dsa_with_sha256[DER_OID_SZ_id_dsa_with_sha256] = {
DER_OID_V_id_dsa_with_sha256
};
/*
* id-dsa-with-sha384 OBJECT IDENTIFIER ::= { sigAlgs 3 }
*/
const unsigned char ossl_der_oid_id_dsa_with_sha384[DER_OID_SZ_id_dsa_with_sha384] = {
DER_OID_V_id_dsa_with_sha384
};
/*
* id-dsa-with-sha512 OBJECT IDENTIFIER ::= { sigAlgs 4 }
*/
const unsigned char ossl_der_oid_id_dsa_with_sha512[DER_OID_SZ_id_dsa_with_sha512] = {
DER_OID_V_id_dsa_with_sha512
};
/*
* id-dsa-with-sha3-224 OBJECT IDENTIFIER ::= { sigAlgs 5 }
*/
const unsigned char ossl_der_oid_id_dsa_with_sha3_224[DER_OID_SZ_id_dsa_with_sha3_224] = {
DER_OID_V_id_dsa_with_sha3_224
};
/*
* id-dsa-with-sha3-256 OBJECT IDENTIFIER ::= { sigAlgs 6 }
*/
const unsigned char ossl_der_oid_id_dsa_with_sha3_256[DER_OID_SZ_id_dsa_with_sha3_256] = {
DER_OID_V_id_dsa_with_sha3_256
};
/*
* id-dsa-with-sha3-384 OBJECT IDENTIFIER ::= { sigAlgs 7 }
*/
const unsigned char ossl_der_oid_id_dsa_with_sha3_384[DER_OID_SZ_id_dsa_with_sha3_384] = {
DER_OID_V_id_dsa_with_sha3_384
};
/*
* id-dsa-with-sha3-512 OBJECT IDENTIFIER ::= { sigAlgs 8 }
*/
const unsigned char ossl_der_oid_id_dsa_with_sha3_512[DER_OID_SZ_id_dsa_with_sha3_512] = {
DER_OID_V_id_dsa_with_sha3_512
};
/* clang-format on */
@@ -0,0 +1,281 @@
/*
* WARNING: do not edit!
* Generated by Makefile from providers/common/der/der_ec_gen.c.in
*
* Copyright 2020-2021 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_ec.h"
/* Well known OIDs precompiled */
/* clang-format off */
/*
* ecdsa-with-SHA1 OBJECT IDENTIFIER ::= { id-ecSigType 1 }
*/
const unsigned char ossl_der_oid_ecdsa_with_SHA1[DER_OID_SZ_ecdsa_with_SHA1] = {
DER_OID_V_ecdsa_with_SHA1
};
/*
* id-ecPublicKey OBJECT IDENTIFIER ::= { id-publicKeyType 1 }
*/
const unsigned char ossl_der_oid_id_ecPublicKey[DER_OID_SZ_id_ecPublicKey] = {
DER_OID_V_id_ecPublicKey
};
/*
* c2pnb163v1 OBJECT IDENTIFIER ::= { c-TwoCurve 1 }
*/
const unsigned char ossl_der_oid_c2pnb163v1[DER_OID_SZ_c2pnb163v1] = {
DER_OID_V_c2pnb163v1
};
/*
* c2pnb163v2 OBJECT IDENTIFIER ::= { c-TwoCurve 2 }
*/
const unsigned char ossl_der_oid_c2pnb163v2[DER_OID_SZ_c2pnb163v2] = {
DER_OID_V_c2pnb163v2
};
/*
* c2pnb163v3 OBJECT IDENTIFIER ::= { c-TwoCurve 3 }
*/
const unsigned char ossl_der_oid_c2pnb163v3[DER_OID_SZ_c2pnb163v3] = {
DER_OID_V_c2pnb163v3
};
/*
* c2pnb176w1 OBJECT IDENTIFIER ::= { c-TwoCurve 4 }
*/
const unsigned char ossl_der_oid_c2pnb176w1[DER_OID_SZ_c2pnb176w1] = {
DER_OID_V_c2pnb176w1
};
/*
* c2tnb191v1 OBJECT IDENTIFIER ::= { c-TwoCurve 5 }
*/
const unsigned char ossl_der_oid_c2tnb191v1[DER_OID_SZ_c2tnb191v1] = {
DER_OID_V_c2tnb191v1
};
/*
* c2tnb191v2 OBJECT IDENTIFIER ::= { c-TwoCurve 6 }
*/
const unsigned char ossl_der_oid_c2tnb191v2[DER_OID_SZ_c2tnb191v2] = {
DER_OID_V_c2tnb191v2
};
/*
* c2tnb191v3 OBJECT IDENTIFIER ::= { c-TwoCurve 7 }
*/
const unsigned char ossl_der_oid_c2tnb191v3[DER_OID_SZ_c2tnb191v3] = {
DER_OID_V_c2tnb191v3
};
/*
* c2onb191v4 OBJECT IDENTIFIER ::= { c-TwoCurve 8 }
*/
const unsigned char ossl_der_oid_c2onb191v4[DER_OID_SZ_c2onb191v4] = {
DER_OID_V_c2onb191v4
};
/*
* c2onb191v5 OBJECT IDENTIFIER ::= { c-TwoCurve 9 }
*/
const unsigned char ossl_der_oid_c2onb191v5[DER_OID_SZ_c2onb191v5] = {
DER_OID_V_c2onb191v5
};
/*
* c2pnb208w1 OBJECT IDENTIFIER ::= { c-TwoCurve 10 }
*/
const unsigned char ossl_der_oid_c2pnb208w1[DER_OID_SZ_c2pnb208w1] = {
DER_OID_V_c2pnb208w1
};
/*
* c2tnb239v1 OBJECT IDENTIFIER ::= { c-TwoCurve 11 }
*/
const unsigned char ossl_der_oid_c2tnb239v1[DER_OID_SZ_c2tnb239v1] = {
DER_OID_V_c2tnb239v1
};
/*
* c2tnb239v2 OBJECT IDENTIFIER ::= { c-TwoCurve 12 }
*/
const unsigned char ossl_der_oid_c2tnb239v2[DER_OID_SZ_c2tnb239v2] = {
DER_OID_V_c2tnb239v2
};
/*
* c2tnb239v3 OBJECT IDENTIFIER ::= { c-TwoCurve 13 }
*/
const unsigned char ossl_der_oid_c2tnb239v3[DER_OID_SZ_c2tnb239v3] = {
DER_OID_V_c2tnb239v3
};
/*
* c2onb239v4 OBJECT IDENTIFIER ::= { c-TwoCurve 14 }
*/
const unsigned char ossl_der_oid_c2onb239v4[DER_OID_SZ_c2onb239v4] = {
DER_OID_V_c2onb239v4
};
/*
* c2onb239v5 OBJECT IDENTIFIER ::= { c-TwoCurve 15 }
*/
const unsigned char ossl_der_oid_c2onb239v5[DER_OID_SZ_c2onb239v5] = {
DER_OID_V_c2onb239v5
};
/*
* c2pnb272w1 OBJECT IDENTIFIER ::= { c-TwoCurve 16 }
*/
const unsigned char ossl_der_oid_c2pnb272w1[DER_OID_SZ_c2pnb272w1] = {
DER_OID_V_c2pnb272w1
};
/*
* c2pnb304w1 OBJECT IDENTIFIER ::= { c-TwoCurve 17 }
*/
const unsigned char ossl_der_oid_c2pnb304w1[DER_OID_SZ_c2pnb304w1] = {
DER_OID_V_c2pnb304w1
};
/*
* c2tnb359v1 OBJECT IDENTIFIER ::= { c-TwoCurve 18 }
*/
const unsigned char ossl_der_oid_c2tnb359v1[DER_OID_SZ_c2tnb359v1] = {
DER_OID_V_c2tnb359v1
};
/*
* c2pnb368w1 OBJECT IDENTIFIER ::= { c-TwoCurve 19 }
*/
const unsigned char ossl_der_oid_c2pnb368w1[DER_OID_SZ_c2pnb368w1] = {
DER_OID_V_c2pnb368w1
};
/*
* c2tnb431r1 OBJECT IDENTIFIER ::= { c-TwoCurve 20 }
*/
const unsigned char ossl_der_oid_c2tnb431r1[DER_OID_SZ_c2tnb431r1] = {
DER_OID_V_c2tnb431r1
};
/*
* prime192v1 OBJECT IDENTIFIER ::= { primeCurve 1 }
*/
const unsigned char ossl_der_oid_prime192v1[DER_OID_SZ_prime192v1] = {
DER_OID_V_prime192v1
};
/*
* prime192v2 OBJECT IDENTIFIER ::= { primeCurve 2 }
*/
const unsigned char ossl_der_oid_prime192v2[DER_OID_SZ_prime192v2] = {
DER_OID_V_prime192v2
};
/*
* prime192v3 OBJECT IDENTIFIER ::= { primeCurve 3 }
*/
const unsigned char ossl_der_oid_prime192v3[DER_OID_SZ_prime192v3] = {
DER_OID_V_prime192v3
};
/*
* prime239v1 OBJECT IDENTIFIER ::= { primeCurve 4 }
*/
const unsigned char ossl_der_oid_prime239v1[DER_OID_SZ_prime239v1] = {
DER_OID_V_prime239v1
};
/*
* prime239v2 OBJECT IDENTIFIER ::= { primeCurve 5 }
*/
const unsigned char ossl_der_oid_prime239v2[DER_OID_SZ_prime239v2] = {
DER_OID_V_prime239v2
};
/*
* prime239v3 OBJECT IDENTIFIER ::= { primeCurve 6 }
*/
const unsigned char ossl_der_oid_prime239v3[DER_OID_SZ_prime239v3] = {
DER_OID_V_prime239v3
};
/*
* prime256v1 OBJECT IDENTIFIER ::= { primeCurve 7 }
*/
const unsigned char ossl_der_oid_prime256v1[DER_OID_SZ_prime256v1] = {
DER_OID_V_prime256v1
};
/*
* ecdsa-with-SHA224 OBJECT IDENTIFIER ::= { iso(1) member-body(2)
* us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 1 }
*/
const unsigned char ossl_der_oid_ecdsa_with_SHA224[DER_OID_SZ_ecdsa_with_SHA224] = {
DER_OID_V_ecdsa_with_SHA224
};
/*
* ecdsa-with-SHA256 OBJECT IDENTIFIER ::= { iso(1) member-body(2)
* us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 2 }
*/
const unsigned char ossl_der_oid_ecdsa_with_SHA256[DER_OID_SZ_ecdsa_with_SHA256] = {
DER_OID_V_ecdsa_with_SHA256
};
/*
* ecdsa-with-SHA384 OBJECT IDENTIFIER ::= { iso(1) member-body(2)
* us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 3 }
*/
const unsigned char ossl_der_oid_ecdsa_with_SHA384[DER_OID_SZ_ecdsa_with_SHA384] = {
DER_OID_V_ecdsa_with_SHA384
};
/*
* ecdsa-with-SHA512 OBJECT IDENTIFIER ::= { iso(1) member-body(2)
* us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 4 }
*/
const unsigned char ossl_der_oid_ecdsa_with_SHA512[DER_OID_SZ_ecdsa_with_SHA512] = {
DER_OID_V_ecdsa_with_SHA512
};
/*
* id-ecdsa-with-sha3-224 OBJECT IDENTIFIER ::= { sigAlgs 9 }
*/
const unsigned char ossl_der_oid_id_ecdsa_with_sha3_224[DER_OID_SZ_id_ecdsa_with_sha3_224] = {
DER_OID_V_id_ecdsa_with_sha3_224
};
/*
* id-ecdsa-with-sha3-256 OBJECT IDENTIFIER ::= { sigAlgs 10 }
*/
const unsigned char ossl_der_oid_id_ecdsa_with_sha3_256[DER_OID_SZ_id_ecdsa_with_sha3_256] = {
DER_OID_V_id_ecdsa_with_sha3_256
};
/*
* id-ecdsa-with-sha3-384 OBJECT IDENTIFIER ::= { sigAlgs 11 }
*/
const unsigned char ossl_der_oid_id_ecdsa_with_sha3_384[DER_OID_SZ_id_ecdsa_with_sha3_384] = {
DER_OID_V_id_ecdsa_with_sha3_384
};
/*
* id-ecdsa-with-sha3-512 OBJECT IDENTIFIER ::= { sigAlgs 12 }
*/
const unsigned char ossl_der_oid_id_ecdsa_with_sha3_512[DER_OID_SZ_id_ecdsa_with_sha3_512] = {
DER_OID_V_id_ecdsa_with_sha3_512
};
/* clang-format on */
@@ -0,0 +1,46 @@
/*
* WARNING: do not edit!
* Generated by Makefile from providers/common/der/der_ecx_gen.c.in
*
* Copyright 2020-2021 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_ecx.h"
/* Well known OIDs precompiled */
/* clang-format off */
/*
* id-X25519 OBJECT IDENTIFIER ::= { id-edwards-curve-algs 110 }
*/
const unsigned char ossl_der_oid_id_X25519[DER_OID_SZ_id_X25519] = {
DER_OID_V_id_X25519
};
/*
* id-X448 OBJECT IDENTIFIER ::= { id-edwards-curve-algs 111 }
*/
const unsigned char ossl_der_oid_id_X448[DER_OID_SZ_id_X448] = {
DER_OID_V_id_X448
};
/*
* id-Ed25519 OBJECT IDENTIFIER ::= { id-edwards-curve-algs 112 }
*/
const unsigned char ossl_der_oid_id_Ed25519[DER_OID_SZ_id_Ed25519] = {
DER_OID_V_id_Ed25519
};
/*
* id-Ed448 OBJECT IDENTIFIER ::= { id-edwards-curve-algs 113 }
*/
const unsigned char ossl_der_oid_id_Ed448[DER_OID_SZ_id_Ed448] = {
DER_OID_V_id_Ed448
};
/* clang-format on */
@@ -0,0 +1,39 @@
/*
* WARNING: do not edit!
* Generated by Makefile from providers/common/der/der_ml_dsa_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_ml_dsa.h"
/* Well known OIDs precompiled */
/* clang-format off */
/*
* id-ml-dsa-44 OBJECT IDENTIFIER ::= { sigAlgs 17 }
*/
const unsigned char ossl_der_oid_id_ml_dsa_44[DER_OID_SZ_id_ml_dsa_44] = {
DER_OID_V_id_ml_dsa_44
};
/*
* id-ml-dsa-65 OBJECT IDENTIFIER ::= { sigAlgs 18 }
*/
const unsigned char ossl_der_oid_id_ml_dsa_65[DER_OID_SZ_id_ml_dsa_65] = {
DER_OID_V_id_ml_dsa_65
};
/*
* id-ml-dsa-87 OBJECT IDENTIFIER ::= { sigAlgs 19 }
*/
const unsigned char ossl_der_oid_id_ml_dsa_87[DER_OID_SZ_id_ml_dsa_87] = {
DER_OID_V_id_ml_dsa_87
};
/* clang-format on */
@@ -0,0 +1,176 @@
/*
* WARNING: do not edit!
* Generated by Makefile from providers/common/der/der_rsa_gen.c.in
*
* Copyright 2020-2021 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_rsa.h"
/* Well known OIDs precompiled */
/* clang-format off */
/*
* hashAlgs OBJECT IDENTIFIER ::= { nistAlgorithms 2 }
*/
const unsigned char ossl_der_oid_hashAlgs[DER_OID_SZ_hashAlgs] = {
DER_OID_V_hashAlgs
};
/*
* rsaEncryption OBJECT IDENTIFIER ::= { pkcs-1 1 }
*/
const unsigned char ossl_der_oid_rsaEncryption[DER_OID_SZ_rsaEncryption] = {
DER_OID_V_rsaEncryption
};
/*
* id-RSAES-OAEP OBJECT IDENTIFIER ::= { pkcs-1 7 }
*/
const unsigned char ossl_der_oid_id_RSAES_OAEP[DER_OID_SZ_id_RSAES_OAEP] = {
DER_OID_V_id_RSAES_OAEP
};
/*
* id-pSpecified OBJECT IDENTIFIER ::= { pkcs-1 9 }
*/
const unsigned char ossl_der_oid_id_pSpecified[DER_OID_SZ_id_pSpecified] = {
DER_OID_V_id_pSpecified
};
/*
* id-RSASSA-PSS OBJECT IDENTIFIER ::= { pkcs-1 10 }
*/
const unsigned char ossl_der_oid_id_RSASSA_PSS[DER_OID_SZ_id_RSASSA_PSS] = {
DER_OID_V_id_RSASSA_PSS
};
/*
* md2WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 2 }
*/
const unsigned char ossl_der_oid_md2WithRSAEncryption[DER_OID_SZ_md2WithRSAEncryption] = {
DER_OID_V_md2WithRSAEncryption
};
/*
* md5WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 4 }
*/
const unsigned char ossl_der_oid_md5WithRSAEncryption[DER_OID_SZ_md5WithRSAEncryption] = {
DER_OID_V_md5WithRSAEncryption
};
/*
* sha1WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 5 }
*/
const unsigned char ossl_der_oid_sha1WithRSAEncryption[DER_OID_SZ_sha1WithRSAEncryption] = {
DER_OID_V_sha1WithRSAEncryption
};
/*
* sha224WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 14 }
*/
const unsigned char ossl_der_oid_sha224WithRSAEncryption[DER_OID_SZ_sha224WithRSAEncryption] = {
DER_OID_V_sha224WithRSAEncryption
};
/*
* sha256WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 11 }
*/
const unsigned char ossl_der_oid_sha256WithRSAEncryption[DER_OID_SZ_sha256WithRSAEncryption] = {
DER_OID_V_sha256WithRSAEncryption
};
/*
* sha384WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 12 }
*/
const unsigned char ossl_der_oid_sha384WithRSAEncryption[DER_OID_SZ_sha384WithRSAEncryption] = {
DER_OID_V_sha384WithRSAEncryption
};
/*
* sha512WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 13 }
*/
const unsigned char ossl_der_oid_sha512WithRSAEncryption[DER_OID_SZ_sha512WithRSAEncryption] = {
DER_OID_V_sha512WithRSAEncryption
};
/*
* sha512-224WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 15 }
*/
const unsigned char ossl_der_oid_sha512_224WithRSAEncryption[DER_OID_SZ_sha512_224WithRSAEncryption] = {
DER_OID_V_sha512_224WithRSAEncryption
};
/*
* sha512-256WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 16 }
*/
const unsigned char ossl_der_oid_sha512_256WithRSAEncryption[DER_OID_SZ_sha512_256WithRSAEncryption] = {
DER_OID_V_sha512_256WithRSAEncryption
};
/*
* id-mgf1 OBJECT IDENTIFIER ::= { pkcs-1 8 }
*/
const unsigned char ossl_der_oid_id_mgf1[DER_OID_SZ_id_mgf1] = {
DER_OID_V_id_mgf1
};
/*
* id-rsassa-pkcs1-v1_5-with-sha3-224 OBJECT IDENTIFIER ::= { sigAlgs 13 }
*/
const unsigned char ossl_der_oid_id_rsassa_pkcs1_v1_5_with_sha3_224[DER_OID_SZ_id_rsassa_pkcs1_v1_5_with_sha3_224] = {
DER_OID_V_id_rsassa_pkcs1_v1_5_with_sha3_224
};
/*
* id-rsassa-pkcs1-v1_5-with-sha3-256 OBJECT IDENTIFIER ::= { sigAlgs 14 }
*/
const unsigned char ossl_der_oid_id_rsassa_pkcs1_v1_5_with_sha3_256[DER_OID_SZ_id_rsassa_pkcs1_v1_5_with_sha3_256] = {
DER_OID_V_id_rsassa_pkcs1_v1_5_with_sha3_256
};
/*
* id-rsassa-pkcs1-v1_5-with-sha3-384 OBJECT IDENTIFIER ::= { sigAlgs 15 }
*/
const unsigned char ossl_der_oid_id_rsassa_pkcs1_v1_5_with_sha3_384[DER_OID_SZ_id_rsassa_pkcs1_v1_5_with_sha3_384] = {
DER_OID_V_id_rsassa_pkcs1_v1_5_with_sha3_384
};
/*
* id-rsassa-pkcs1-v1_5-with-sha3-512 OBJECT IDENTIFIER ::= { sigAlgs 16 }
*/
const unsigned char ossl_der_oid_id_rsassa_pkcs1_v1_5_with_sha3_512[DER_OID_SZ_id_rsassa_pkcs1_v1_5_with_sha3_512] = {
DER_OID_V_id_rsassa_pkcs1_v1_5_with_sha3_512
};
/*
* md4WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 3 }
*/
const unsigned char ossl_der_oid_md4WithRSAEncryption[DER_OID_SZ_md4WithRSAEncryption] = {
DER_OID_V_md4WithRSAEncryption
};
/*
* ripemd160WithRSAEncryption OBJECT IDENTIFIER ::= {
* iso(1) identified-organization(3) teletrust(36) algorithm(3) signatureAlgorithm(3) rsaSignature(1) 2
* }
*/
const unsigned char ossl_der_oid_ripemd160WithRSAEncryption[DER_OID_SZ_ripemd160WithRSAEncryption] = {
DER_OID_V_ripemd160WithRSAEncryption
};
/*
* mdc2WithRSASignature OBJECT IDENTIFIER ::= {
* iso(1) identified-organization(3) oiw(14) secsig(3) algorithms(2) mdc2WithRSASignature(14)
* }
*/
const unsigned char ossl_der_oid_mdc2WithRSASignature[DER_OID_SZ_mdc2WithRSASignature] = {
DER_OID_V_mdc2WithRSASignature
};
/* clang-format on */
@@ -0,0 +1,102 @@
/*
* WARNING: do not edit!
* Generated by Makefile from providers/common/der/der_slh_dsa_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_slh_dsa.h"
/* Well known OIDs precompiled */
/* clang-format off */
/*
* id-slh-dsa-sha2-128s OBJECT IDENTIFIER ::= { sigAlgs 20 }
*/
const unsigned char ossl_der_oid_id_slh_dsa_sha2_128s[DER_OID_SZ_id_slh_dsa_sha2_128s] = {
DER_OID_V_id_slh_dsa_sha2_128s
};
/*
* id-slh-dsa-sha2-128f OBJECT IDENTIFIER ::= { sigAlgs 21 }
*/
const unsigned char ossl_der_oid_id_slh_dsa_sha2_128f[DER_OID_SZ_id_slh_dsa_sha2_128f] = {
DER_OID_V_id_slh_dsa_sha2_128f
};
/*
* id-slh-dsa-sha2-192s OBJECT IDENTIFIER ::= { sigAlgs 22 }
*/
const unsigned char ossl_der_oid_id_slh_dsa_sha2_192s[DER_OID_SZ_id_slh_dsa_sha2_192s] = {
DER_OID_V_id_slh_dsa_sha2_192s
};
/*
* id-slh-dsa-sha2-192f OBJECT IDENTIFIER ::= { sigAlgs 23 }
*/
const unsigned char ossl_der_oid_id_slh_dsa_sha2_192f[DER_OID_SZ_id_slh_dsa_sha2_192f] = {
DER_OID_V_id_slh_dsa_sha2_192f
};
/*
* id-slh-dsa-sha2-256s OBJECT IDENTIFIER ::= { sigAlgs 24 }
*/
const unsigned char ossl_der_oid_id_slh_dsa_sha2_256s[DER_OID_SZ_id_slh_dsa_sha2_256s] = {
DER_OID_V_id_slh_dsa_sha2_256s
};
/*
* id-slh-dsa-sha2-256f OBJECT IDENTIFIER ::= { sigAlgs 25 }
*/
const unsigned char ossl_der_oid_id_slh_dsa_sha2_256f[DER_OID_SZ_id_slh_dsa_sha2_256f] = {
DER_OID_V_id_slh_dsa_sha2_256f
};
/*
* id-slh-dsa-shake-128s OBJECT IDENTIFIER ::= { sigAlgs 26 }
*/
const unsigned char ossl_der_oid_id_slh_dsa_shake_128s[DER_OID_SZ_id_slh_dsa_shake_128s] = {
DER_OID_V_id_slh_dsa_shake_128s
};
/*
* id-slh-dsa-shake-128f OBJECT IDENTIFIER ::= { sigAlgs 27 }
*/
const unsigned char ossl_der_oid_id_slh_dsa_shake_128f[DER_OID_SZ_id_slh_dsa_shake_128f] = {
DER_OID_V_id_slh_dsa_shake_128f
};
/*
* id-slh-dsa-shake-192s OBJECT IDENTIFIER ::= { sigAlgs 28 }
*/
const unsigned char ossl_der_oid_id_slh_dsa_shake_192s[DER_OID_SZ_id_slh_dsa_shake_192s] = {
DER_OID_V_id_slh_dsa_shake_192s
};
/*
* id-slh-dsa-shake-192f OBJECT IDENTIFIER ::= { sigAlgs 29 }
*/
const unsigned char ossl_der_oid_id_slh_dsa_shake_192f[DER_OID_SZ_id_slh_dsa_shake_192f] = {
DER_OID_V_id_slh_dsa_shake_192f
};
/*
* id-slh-dsa-shake-256s OBJECT IDENTIFIER ::= { sigAlgs 30 }
*/
const unsigned char ossl_der_oid_id_slh_dsa_shake_256s[DER_OID_SZ_id_slh_dsa_shake_256s] = {
DER_OID_V_id_slh_dsa_shake_256s
};
/*
* id-slh-dsa-shake-256f OBJECT IDENTIFIER ::= { sigAlgs 31 }
*/
const unsigned char ossl_der_oid_id_slh_dsa_shake_256f[DER_OID_SZ_id_slh_dsa_shake_256f] = {
DER_OID_V_id_slh_dsa_shake_256f
};
/* clang-format on */
@@ -0,0 +1,32 @@
/*
* WARNING: do not edit!
* Generated by Makefile from providers/common/der/der_sm2_gen.c.in
*
* Copyright 2020-2021 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_sm2.h"
/* Well known OIDs precompiled */
/* clang-format off */
/*
* sm2-with-SM3 OBJECT IDENTIFIER ::= { sm-scheme 501 }
*/
const unsigned char ossl_der_oid_sm2_with_SM3[DER_OID_SZ_sm2_with_SM3] = {
DER_OID_V_sm2_with_SM3
};
/*
* curveSM2 OBJECT IDENTIFIER ::= { sm-scheme 301 }
*/
const unsigned char ossl_der_oid_curveSM2[DER_OID_SZ_curveSM2] = {
DER_OID_V_curveSM2
};
/* clang-format on */
@@ -0,0 +1,48 @@
/*
* WARNING: do not edit!
* Generated by Makefile from providers/common/der/der_wrap_gen.c.in
*
* Copyright 2020-2021 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_wrap.h"
/* Well known OIDs precompiled */
/* clang-format off */
/*
* id-alg-CMS3DESwrap OBJECT IDENTIFIER ::= {
* iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) alg(3) 6
* }
*/
const unsigned char ossl_der_oid_id_alg_CMS3DESwrap[DER_OID_SZ_id_alg_CMS3DESwrap] = {
DER_OID_V_id_alg_CMS3DESwrap
};
/*
* id-aes128-wrap OBJECT IDENTIFIER ::= { aes 5 }
*/
const unsigned char ossl_der_oid_id_aes128_wrap[DER_OID_SZ_id_aes128_wrap] = {
DER_OID_V_id_aes128_wrap
};
/*
* id-aes192-wrap OBJECT IDENTIFIER ::= { aes 25 }
*/
const unsigned char ossl_der_oid_id_aes192_wrap[DER_OID_SZ_id_aes192_wrap] = {
DER_OID_V_id_aes192_wrap
};
/*
* id-aes256-wrap OBJECT IDENTIFIER ::= { aes 45 }
*/
const unsigned char ossl_der_oid_id_aes256_wrap[DER_OID_SZ_id_aes256_wrap] = {
DER_OID_V_id_aes256_wrap
};
/* clang-format on */
@@ -0,0 +1,162 @@
/*
* WARNING: do not edit!
* Generated by Makefile from providers/common/include/prov/der_digests.h.in
*
* Copyright 2020-2021 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 */
/*
* sigAlgs OBJECT IDENTIFIER ::= { nistAlgorithms 3 }
*/
#define DER_OID_V_sigAlgs DER_P_OBJECT, 8, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03
#define DER_OID_SZ_sigAlgs 10
extern const unsigned char ossl_der_oid_sigAlgs[DER_OID_SZ_sigAlgs];
/*
* id-sha1 OBJECT IDENTIFIER ::= { iso(1)
* identified-organization(3) oiw(14)
* secsig(3) algorithms(2) 26 }
*/
#define DER_OID_V_id_sha1 DER_P_OBJECT, 5, 0x2B, 0x0E, 0x03, 0x02, 0x1A
#define DER_OID_SZ_id_sha1 7
extern const unsigned char ossl_der_oid_id_sha1[DER_OID_SZ_id_sha1];
/*
* id-md2 OBJECT IDENTIFIER ::= {
* iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 2 }
*/
#define DER_OID_V_id_md2 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x02, 0x02
#define DER_OID_SZ_id_md2 10
extern const unsigned char ossl_der_oid_id_md2[DER_OID_SZ_id_md2];
/*
* id-md5 OBJECT IDENTIFIER ::= {
* iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 5 }
*/
#define DER_OID_V_id_md5 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x02, 0x05
#define DER_OID_SZ_id_md5 10
extern const unsigned char ossl_der_oid_id_md5[DER_OID_SZ_id_md5];
/*
* id-sha256 OBJECT IDENTIFIER ::= { hashAlgs 1 }
*/
#define DER_OID_V_id_sha256 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01
#define DER_OID_SZ_id_sha256 11
extern const unsigned char ossl_der_oid_id_sha256[DER_OID_SZ_id_sha256];
/*
* id-sha384 OBJECT IDENTIFIER ::= { hashAlgs 2 }
*/
#define DER_OID_V_id_sha384 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x02
#define DER_OID_SZ_id_sha384 11
extern const unsigned char ossl_der_oid_id_sha384[DER_OID_SZ_id_sha384];
/*
* id-sha512 OBJECT IDENTIFIER ::= { hashAlgs 3 }
*/
#define DER_OID_V_id_sha512 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03
#define DER_OID_SZ_id_sha512 11
extern const unsigned char ossl_der_oid_id_sha512[DER_OID_SZ_id_sha512];
/*
* id-sha224 OBJECT IDENTIFIER ::= { hashAlgs 4 }
*/
#define DER_OID_V_id_sha224 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x04
#define DER_OID_SZ_id_sha224 11
extern const unsigned char ossl_der_oid_id_sha224[DER_OID_SZ_id_sha224];
/*
* id-sha512-224 OBJECT IDENTIFIER ::= { hashAlgs 5 }
*/
#define DER_OID_V_id_sha512_224 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x05
#define DER_OID_SZ_id_sha512_224 11
extern const unsigned char ossl_der_oid_id_sha512_224[DER_OID_SZ_id_sha512_224];
/*
* id-sha512-256 OBJECT IDENTIFIER ::= { hashAlgs 6 }
*/
#define DER_OID_V_id_sha512_256 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x06
#define DER_OID_SZ_id_sha512_256 11
extern const unsigned char ossl_der_oid_id_sha512_256[DER_OID_SZ_id_sha512_256];
/*
* id-sha3-224 OBJECT IDENTIFIER ::= { hashAlgs 7 }
*/
#define DER_OID_V_id_sha3_224 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x07
#define DER_OID_SZ_id_sha3_224 11
extern const unsigned char ossl_der_oid_id_sha3_224[DER_OID_SZ_id_sha3_224];
/*
* id-sha3-256 OBJECT IDENTIFIER ::= { hashAlgs 8 }
*/
#define DER_OID_V_id_sha3_256 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x08
#define DER_OID_SZ_id_sha3_256 11
extern const unsigned char ossl_der_oid_id_sha3_256[DER_OID_SZ_id_sha3_256];
/*
* id-sha3-384 OBJECT IDENTIFIER ::= { hashAlgs 9 }
*/
#define DER_OID_V_id_sha3_384 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x09
#define DER_OID_SZ_id_sha3_384 11
extern const unsigned char ossl_der_oid_id_sha3_384[DER_OID_SZ_id_sha3_384];
/*
* id-sha3-512 OBJECT IDENTIFIER ::= { hashAlgs 10 }
*/
#define DER_OID_V_id_sha3_512 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x0A
#define DER_OID_SZ_id_sha3_512 11
extern const unsigned char ossl_der_oid_id_sha3_512[DER_OID_SZ_id_sha3_512];
/*
* id-shake128 OBJECT IDENTIFIER ::= { hashAlgs 11 }
*/
#define DER_OID_V_id_shake128 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x0B
#define DER_OID_SZ_id_shake128 11
extern const unsigned char ossl_der_oid_id_shake128[DER_OID_SZ_id_shake128];
/*
* id-shake256 OBJECT IDENTIFIER ::= { hashAlgs 12 }
*/
#define DER_OID_V_id_shake256 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x0C
#define DER_OID_SZ_id_shake256 11
extern const unsigned char ossl_der_oid_id_shake256[DER_OID_SZ_id_shake256];
/*
* id-shake128-len OBJECT IDENTIFIER ::= { hashAlgs 17 }
*/
#define DER_OID_V_id_shake128_len DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x11
#define DER_OID_SZ_id_shake128_len 11
extern const unsigned char ossl_der_oid_id_shake128_len[DER_OID_SZ_id_shake128_len];
/*
* id-shake256-len OBJECT IDENTIFIER ::= { hashAlgs 18 }
*/
#define DER_OID_V_id_shake256_len DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x12
#define DER_OID_SZ_id_shake256_len 11
extern const unsigned char ossl_der_oid_id_shake256_len[DER_OID_SZ_id_shake256_len];
/*
* id-KMACWithSHAKE128 OBJECT IDENTIFIER ::={hashAlgs 19}
*/
#define DER_OID_V_id_KMACWithSHAKE128 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x13
#define DER_OID_SZ_id_KMACWithSHAKE128 11
extern const unsigned char ossl_der_oid_id_KMACWithSHAKE128[DER_OID_SZ_id_KMACWithSHAKE128];
/*
* id-KMACWithSHAKE256 OBJECT IDENTIFIER ::={ hashAlgs 20}
*/
#define DER_OID_V_id_KMACWithSHAKE256 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x14
#define DER_OID_SZ_id_KMACWithSHAKE256 11
extern const unsigned char ossl_der_oid_id_KMACWithSHAKE256[DER_OID_SZ_id_KMACWithSHAKE256];
/* clang-format on */
@@ -0,0 +1,96 @@
/*
* WARNING: do not edit!
* Generated by Makefile from providers/common/include/prov/der_dsa.h.in
*
* Copyright 2020-2021 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-dsa OBJECT IDENTIFIER ::= {
* iso(1) member-body(2) us(840) x9-57(10040) x9algorithm(4) 1 }
*/
#define DER_OID_V_id_dsa DER_P_OBJECT, 7, 0x2A, 0x86, 0x48, 0xCE, 0x38, 0x04, 0x01
#define DER_OID_SZ_id_dsa 9
extern const unsigned char ossl_der_oid_id_dsa[DER_OID_SZ_id_dsa];
/*
* id-dsa-with-sha1 OBJECT IDENTIFIER ::= {
* iso(1) member-body(2) us(840) x9-57 (10040) x9algorithm(4) 3 }
*/
#define DER_OID_V_id_dsa_with_sha1 DER_P_OBJECT, 7, 0x2A, 0x86, 0x48, 0xCE, 0x38, 0x04, 0x03
#define DER_OID_SZ_id_dsa_with_sha1 9
extern const unsigned char ossl_der_oid_id_dsa_with_sha1[DER_OID_SZ_id_dsa_with_sha1];
/*
* id-dsa-with-sha224 OBJECT IDENTIFIER ::= { sigAlgs 1 }
*/
#define DER_OID_V_id_dsa_with_sha224 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x01
#define DER_OID_SZ_id_dsa_with_sha224 11
extern const unsigned char ossl_der_oid_id_dsa_with_sha224[DER_OID_SZ_id_dsa_with_sha224];
/*
* id-dsa-with-sha256 OBJECT IDENTIFIER ::= { sigAlgs 2 }
*/
#define DER_OID_V_id_dsa_with_sha256 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x02
#define DER_OID_SZ_id_dsa_with_sha256 11
extern const unsigned char ossl_der_oid_id_dsa_with_sha256[DER_OID_SZ_id_dsa_with_sha256];
/*
* id-dsa-with-sha384 OBJECT IDENTIFIER ::= { sigAlgs 3 }
*/
#define DER_OID_V_id_dsa_with_sha384 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x03
#define DER_OID_SZ_id_dsa_with_sha384 11
extern const unsigned char ossl_der_oid_id_dsa_with_sha384[DER_OID_SZ_id_dsa_with_sha384];
/*
* id-dsa-with-sha512 OBJECT IDENTIFIER ::= { sigAlgs 4 }
*/
#define DER_OID_V_id_dsa_with_sha512 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x04
#define DER_OID_SZ_id_dsa_with_sha512 11
extern const unsigned char ossl_der_oid_id_dsa_with_sha512[DER_OID_SZ_id_dsa_with_sha512];
/*
* id-dsa-with-sha3-224 OBJECT IDENTIFIER ::= { sigAlgs 5 }
*/
#define DER_OID_V_id_dsa_with_sha3_224 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x05
#define DER_OID_SZ_id_dsa_with_sha3_224 11
extern const unsigned char ossl_der_oid_id_dsa_with_sha3_224[DER_OID_SZ_id_dsa_with_sha3_224];
/*
* id-dsa-with-sha3-256 OBJECT IDENTIFIER ::= { sigAlgs 6 }
*/
#define DER_OID_V_id_dsa_with_sha3_256 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x06
#define DER_OID_SZ_id_dsa_with_sha3_256 11
extern const unsigned char ossl_der_oid_id_dsa_with_sha3_256[DER_OID_SZ_id_dsa_with_sha3_256];
/*
* id-dsa-with-sha3-384 OBJECT IDENTIFIER ::= { sigAlgs 7 }
*/
#define DER_OID_V_id_dsa_with_sha3_384 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x07
#define DER_OID_SZ_id_dsa_with_sha3_384 11
extern const unsigned char ossl_der_oid_id_dsa_with_sha3_384[DER_OID_SZ_id_dsa_with_sha3_384];
/*
* id-dsa-with-sha3-512 OBJECT IDENTIFIER ::= { sigAlgs 8 }
*/
#define DER_OID_V_id_dsa_with_sha3_512 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x08
#define DER_OID_SZ_id_dsa_with_sha3_512 11
extern const unsigned char ossl_der_oid_id_dsa_with_sha3_512[DER_OID_SZ_id_dsa_with_sha3_512];
/* clang-format on */
/* Subject Public Key Info */
int ossl_DER_w_algorithmIdentifier_DSA(WPACKET *pkt, int tag, DSA *dsa);
/* Signature */
int ossl_DER_w_algorithmIdentifier_DSA_with_MD(WPACKET *pkt, int tag,
DSA *dsa, int mdnid);
@@ -0,0 +1,288 @@
/*
* WARNING: do not edit!
* Generated by Makefile from providers/common/include/prov/der_ec.h.in
*
* Copyright 2020-2021 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 "crypto/ec.h"
#include "internal/der.h"
/* Well known OIDs precompiled */
/* clang-format off */
/*
* ecdsa-with-SHA1 OBJECT IDENTIFIER ::= { id-ecSigType 1 }
*/
#define DER_OID_V_ecdsa_with_SHA1 DER_P_OBJECT, 7, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x01
#define DER_OID_SZ_ecdsa_with_SHA1 9
extern const unsigned char ossl_der_oid_ecdsa_with_SHA1[DER_OID_SZ_ecdsa_with_SHA1];
/*
* id-ecPublicKey OBJECT IDENTIFIER ::= { id-publicKeyType 1 }
*/
#define DER_OID_V_id_ecPublicKey DER_P_OBJECT, 7, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01
#define DER_OID_SZ_id_ecPublicKey 9
extern const unsigned char ossl_der_oid_id_ecPublicKey[DER_OID_SZ_id_ecPublicKey];
/*
* c2pnb163v1 OBJECT IDENTIFIER ::= { c-TwoCurve 1 }
*/
#define DER_OID_V_c2pnb163v1 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x00, 0x01
#define DER_OID_SZ_c2pnb163v1 10
extern const unsigned char ossl_der_oid_c2pnb163v1[DER_OID_SZ_c2pnb163v1];
/*
* c2pnb163v2 OBJECT IDENTIFIER ::= { c-TwoCurve 2 }
*/
#define DER_OID_V_c2pnb163v2 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x00, 0x02
#define DER_OID_SZ_c2pnb163v2 10
extern const unsigned char ossl_der_oid_c2pnb163v2[DER_OID_SZ_c2pnb163v2];
/*
* c2pnb163v3 OBJECT IDENTIFIER ::= { c-TwoCurve 3 }
*/
#define DER_OID_V_c2pnb163v3 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x00, 0x03
#define DER_OID_SZ_c2pnb163v3 10
extern const unsigned char ossl_der_oid_c2pnb163v3[DER_OID_SZ_c2pnb163v3];
/*
* c2pnb176w1 OBJECT IDENTIFIER ::= { c-TwoCurve 4 }
*/
#define DER_OID_V_c2pnb176w1 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x00, 0x04
#define DER_OID_SZ_c2pnb176w1 10
extern const unsigned char ossl_der_oid_c2pnb176w1[DER_OID_SZ_c2pnb176w1];
/*
* c2tnb191v1 OBJECT IDENTIFIER ::= { c-TwoCurve 5 }
*/
#define DER_OID_V_c2tnb191v1 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x00, 0x05
#define DER_OID_SZ_c2tnb191v1 10
extern const unsigned char ossl_der_oid_c2tnb191v1[DER_OID_SZ_c2tnb191v1];
/*
* c2tnb191v2 OBJECT IDENTIFIER ::= { c-TwoCurve 6 }
*/
#define DER_OID_V_c2tnb191v2 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x00, 0x06
#define DER_OID_SZ_c2tnb191v2 10
extern const unsigned char ossl_der_oid_c2tnb191v2[DER_OID_SZ_c2tnb191v2];
/*
* c2tnb191v3 OBJECT IDENTIFIER ::= { c-TwoCurve 7 }
*/
#define DER_OID_V_c2tnb191v3 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x00, 0x07
#define DER_OID_SZ_c2tnb191v3 10
extern const unsigned char ossl_der_oid_c2tnb191v3[DER_OID_SZ_c2tnb191v3];
/*
* c2onb191v4 OBJECT IDENTIFIER ::= { c-TwoCurve 8 }
*/
#define DER_OID_V_c2onb191v4 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x00, 0x08
#define DER_OID_SZ_c2onb191v4 10
extern const unsigned char ossl_der_oid_c2onb191v4[DER_OID_SZ_c2onb191v4];
/*
* c2onb191v5 OBJECT IDENTIFIER ::= { c-TwoCurve 9 }
*/
#define DER_OID_V_c2onb191v5 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x00, 0x09
#define DER_OID_SZ_c2onb191v5 10
extern const unsigned char ossl_der_oid_c2onb191v5[DER_OID_SZ_c2onb191v5];
/*
* c2pnb208w1 OBJECT IDENTIFIER ::= { c-TwoCurve 10 }
*/
#define DER_OID_V_c2pnb208w1 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x00, 0x0A
#define DER_OID_SZ_c2pnb208w1 10
extern const unsigned char ossl_der_oid_c2pnb208w1[DER_OID_SZ_c2pnb208w1];
/*
* c2tnb239v1 OBJECT IDENTIFIER ::= { c-TwoCurve 11 }
*/
#define DER_OID_V_c2tnb239v1 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x00, 0x0B
#define DER_OID_SZ_c2tnb239v1 10
extern const unsigned char ossl_der_oid_c2tnb239v1[DER_OID_SZ_c2tnb239v1];
/*
* c2tnb239v2 OBJECT IDENTIFIER ::= { c-TwoCurve 12 }
*/
#define DER_OID_V_c2tnb239v2 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x00, 0x0C
#define DER_OID_SZ_c2tnb239v2 10
extern const unsigned char ossl_der_oid_c2tnb239v2[DER_OID_SZ_c2tnb239v2];
/*
* c2tnb239v3 OBJECT IDENTIFIER ::= { c-TwoCurve 13 }
*/
#define DER_OID_V_c2tnb239v3 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x00, 0x0D
#define DER_OID_SZ_c2tnb239v3 10
extern const unsigned char ossl_der_oid_c2tnb239v3[DER_OID_SZ_c2tnb239v3];
/*
* c2onb239v4 OBJECT IDENTIFIER ::= { c-TwoCurve 14 }
*/
#define DER_OID_V_c2onb239v4 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x00, 0x0E
#define DER_OID_SZ_c2onb239v4 10
extern const unsigned char ossl_der_oid_c2onb239v4[DER_OID_SZ_c2onb239v4];
/*
* c2onb239v5 OBJECT IDENTIFIER ::= { c-TwoCurve 15 }
*/
#define DER_OID_V_c2onb239v5 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x00, 0x0F
#define DER_OID_SZ_c2onb239v5 10
extern const unsigned char ossl_der_oid_c2onb239v5[DER_OID_SZ_c2onb239v5];
/*
* c2pnb272w1 OBJECT IDENTIFIER ::= { c-TwoCurve 16 }
*/
#define DER_OID_V_c2pnb272w1 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x00, 0x10
#define DER_OID_SZ_c2pnb272w1 10
extern const unsigned char ossl_der_oid_c2pnb272w1[DER_OID_SZ_c2pnb272w1];
/*
* c2pnb304w1 OBJECT IDENTIFIER ::= { c-TwoCurve 17 }
*/
#define DER_OID_V_c2pnb304w1 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x00, 0x11
#define DER_OID_SZ_c2pnb304w1 10
extern const unsigned char ossl_der_oid_c2pnb304w1[DER_OID_SZ_c2pnb304w1];
/*
* c2tnb359v1 OBJECT IDENTIFIER ::= { c-TwoCurve 18 }
*/
#define DER_OID_V_c2tnb359v1 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x00, 0x12
#define DER_OID_SZ_c2tnb359v1 10
extern const unsigned char ossl_der_oid_c2tnb359v1[DER_OID_SZ_c2tnb359v1];
/*
* c2pnb368w1 OBJECT IDENTIFIER ::= { c-TwoCurve 19 }
*/
#define DER_OID_V_c2pnb368w1 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x00, 0x13
#define DER_OID_SZ_c2pnb368w1 10
extern const unsigned char ossl_der_oid_c2pnb368w1[DER_OID_SZ_c2pnb368w1];
/*
* c2tnb431r1 OBJECT IDENTIFIER ::= { c-TwoCurve 20 }
*/
#define DER_OID_V_c2tnb431r1 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x00, 0x14
#define DER_OID_SZ_c2tnb431r1 10
extern const unsigned char ossl_der_oid_c2tnb431r1[DER_OID_SZ_c2tnb431r1];
/*
* prime192v1 OBJECT IDENTIFIER ::= { primeCurve 1 }
*/
#define DER_OID_V_prime192v1 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x01
#define DER_OID_SZ_prime192v1 10
extern const unsigned char ossl_der_oid_prime192v1[DER_OID_SZ_prime192v1];
/*
* prime192v2 OBJECT IDENTIFIER ::= { primeCurve 2 }
*/
#define DER_OID_V_prime192v2 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x02
#define DER_OID_SZ_prime192v2 10
extern const unsigned char ossl_der_oid_prime192v2[DER_OID_SZ_prime192v2];
/*
* prime192v3 OBJECT IDENTIFIER ::= { primeCurve 3 }
*/
#define DER_OID_V_prime192v3 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x03
#define DER_OID_SZ_prime192v3 10
extern const unsigned char ossl_der_oid_prime192v3[DER_OID_SZ_prime192v3];
/*
* prime239v1 OBJECT IDENTIFIER ::= { primeCurve 4 }
*/
#define DER_OID_V_prime239v1 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x04
#define DER_OID_SZ_prime239v1 10
extern const unsigned char ossl_der_oid_prime239v1[DER_OID_SZ_prime239v1];
/*
* prime239v2 OBJECT IDENTIFIER ::= { primeCurve 5 }
*/
#define DER_OID_V_prime239v2 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x05
#define DER_OID_SZ_prime239v2 10
extern const unsigned char ossl_der_oid_prime239v2[DER_OID_SZ_prime239v2];
/*
* prime239v3 OBJECT IDENTIFIER ::= { primeCurve 6 }
*/
#define DER_OID_V_prime239v3 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x06
#define DER_OID_SZ_prime239v3 10
extern const unsigned char ossl_der_oid_prime239v3[DER_OID_SZ_prime239v3];
/*
* prime256v1 OBJECT IDENTIFIER ::= { primeCurve 7 }
*/
#define DER_OID_V_prime256v1 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07
#define DER_OID_SZ_prime256v1 10
extern const unsigned char ossl_der_oid_prime256v1[DER_OID_SZ_prime256v1];
/*
* ecdsa-with-SHA224 OBJECT IDENTIFIER ::= { iso(1) member-body(2)
* us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 1 }
*/
#define DER_OID_V_ecdsa_with_SHA224 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x01
#define DER_OID_SZ_ecdsa_with_SHA224 10
extern const unsigned char ossl_der_oid_ecdsa_with_SHA224[DER_OID_SZ_ecdsa_with_SHA224];
/*
* ecdsa-with-SHA256 OBJECT IDENTIFIER ::= { iso(1) member-body(2)
* us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 2 }
*/
#define DER_OID_V_ecdsa_with_SHA256 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02
#define DER_OID_SZ_ecdsa_with_SHA256 10
extern const unsigned char ossl_der_oid_ecdsa_with_SHA256[DER_OID_SZ_ecdsa_with_SHA256];
/*
* ecdsa-with-SHA384 OBJECT IDENTIFIER ::= { iso(1) member-body(2)
* us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 3 }
*/
#define DER_OID_V_ecdsa_with_SHA384 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x03
#define DER_OID_SZ_ecdsa_with_SHA384 10
extern const unsigned char ossl_der_oid_ecdsa_with_SHA384[DER_OID_SZ_ecdsa_with_SHA384];
/*
* ecdsa-with-SHA512 OBJECT IDENTIFIER ::= { iso(1) member-body(2)
* us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 4 }
*/
#define DER_OID_V_ecdsa_with_SHA512 DER_P_OBJECT, 8, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x04
#define DER_OID_SZ_ecdsa_with_SHA512 10
extern const unsigned char ossl_der_oid_ecdsa_with_SHA512[DER_OID_SZ_ecdsa_with_SHA512];
/*
* id-ecdsa-with-sha3-224 OBJECT IDENTIFIER ::= { sigAlgs 9 }
*/
#define DER_OID_V_id_ecdsa_with_sha3_224 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x09
#define DER_OID_SZ_id_ecdsa_with_sha3_224 11
extern const unsigned char ossl_der_oid_id_ecdsa_with_sha3_224[DER_OID_SZ_id_ecdsa_with_sha3_224];
/*
* id-ecdsa-with-sha3-256 OBJECT IDENTIFIER ::= { sigAlgs 10 }
*/
#define DER_OID_V_id_ecdsa_with_sha3_256 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x0A
#define DER_OID_SZ_id_ecdsa_with_sha3_256 11
extern const unsigned char ossl_der_oid_id_ecdsa_with_sha3_256[DER_OID_SZ_id_ecdsa_with_sha3_256];
/*
* id-ecdsa-with-sha3-384 OBJECT IDENTIFIER ::= { sigAlgs 11 }
*/
#define DER_OID_V_id_ecdsa_with_sha3_384 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x0B
#define DER_OID_SZ_id_ecdsa_with_sha3_384 11
extern const unsigned char ossl_der_oid_id_ecdsa_with_sha3_384[DER_OID_SZ_id_ecdsa_with_sha3_384];
/*
* id-ecdsa-with-sha3-512 OBJECT IDENTIFIER ::= { sigAlgs 12 }
*/
#define DER_OID_V_id_ecdsa_with_sha3_512 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x0C
#define DER_OID_SZ_id_ecdsa_with_sha3_512 11
extern const unsigned char ossl_der_oid_id_ecdsa_with_sha3_512[DER_OID_SZ_id_ecdsa_with_sha3_512];
/* clang-format on */
/* Subject Public Key Info */
int ossl_DER_w_algorithmIdentifier_EC(WPACKET *pkt, int cont, EC_KEY *ec);
/* Signature */
int ossl_DER_w_algorithmIdentifier_ECDSA_with_MD(WPACKET *pkt, int cont,
EC_KEY *ec, int mdnid);
@@ -0,0 +1,52 @@
/*
* WARNING: do not edit!
* Generated by Makefile from providers/common/include/prov/der_ecx.h.in
*
* Copyright 2020-2021 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"
#include "crypto/ecx.h"
/* Well known OIDs precompiled */
/* clang-format off */
/*
* id-X25519 OBJECT IDENTIFIER ::= { id-edwards-curve-algs 110 }
*/
#define DER_OID_V_id_X25519 DER_P_OBJECT, 3, 0x2B, 0x65, 0x6E
#define DER_OID_SZ_id_X25519 5
extern const unsigned char ossl_der_oid_id_X25519[DER_OID_SZ_id_X25519];
/*
* id-X448 OBJECT IDENTIFIER ::= { id-edwards-curve-algs 111 }
*/
#define DER_OID_V_id_X448 DER_P_OBJECT, 3, 0x2B, 0x65, 0x6F
#define DER_OID_SZ_id_X448 5
extern const unsigned char ossl_der_oid_id_X448[DER_OID_SZ_id_X448];
/*
* id-Ed25519 OBJECT IDENTIFIER ::= { id-edwards-curve-algs 112 }
*/
#define DER_OID_V_id_Ed25519 DER_P_OBJECT, 3, 0x2B, 0x65, 0x70
#define DER_OID_SZ_id_Ed25519 5
extern const unsigned char ossl_der_oid_id_Ed25519[DER_OID_SZ_id_Ed25519];
/*
* id-Ed448 OBJECT IDENTIFIER ::= { id-edwards-curve-algs 113 }
*/
#define DER_OID_V_id_Ed448 DER_P_OBJECT, 3, 0x2B, 0x65, 0x71
#define DER_OID_SZ_id_Ed448 5
extern const unsigned char ossl_der_oid_id_Ed448[DER_OID_SZ_id_Ed448];
/* clang-format on */
int ossl_DER_w_algorithmIdentifier_ED25519(WPACKET *pkt, int cont, ECX_KEY *ec);
int ossl_DER_w_algorithmIdentifier_ED448(WPACKET *pkt, int cont, ECX_KEY *ec);
int ossl_DER_w_algorithmIdentifier_X25519(WPACKET *pkt, int cont, ECX_KEY *ec);
int ossl_DER_w_algorithmIdentifier_X448(WPACKET *pkt, int cont, ECX_KEY *ec);
@@ -0,0 +1,42 @@
/*
* WARNING: do not edit!
* Generated by Makefile from providers/common/include/prov/der_ml_dsa.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"
#include "crypto/ml_dsa.h"
/* Well known OIDs precompiled */
/* clang-format off */
/*
* id-ml-dsa-44 OBJECT IDENTIFIER ::= { sigAlgs 17 }
*/
#define DER_OID_V_id_ml_dsa_44 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x11
#define DER_OID_SZ_id_ml_dsa_44 11
extern const unsigned char ossl_der_oid_id_ml_dsa_44[DER_OID_SZ_id_ml_dsa_44];
/*
* id-ml-dsa-65 OBJECT IDENTIFIER ::= { sigAlgs 18 }
*/
#define DER_OID_V_id_ml_dsa_65 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x12
#define DER_OID_SZ_id_ml_dsa_65 11
extern const unsigned char ossl_der_oid_id_ml_dsa_65[DER_OID_SZ_id_ml_dsa_65];
/*
* id-ml-dsa-87 OBJECT IDENTIFIER ::= { sigAlgs 19 }
*/
#define DER_OID_V_id_ml_dsa_87 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x13
#define DER_OID_SZ_id_ml_dsa_87 11
extern const unsigned char ossl_der_oid_id_ml_dsa_87[DER_OID_SZ_id_ml_dsa_87];
/* clang-format on */
int ossl_DER_w_algorithmIdentifier_ML_DSA(WPACKET *pkt, int tag, ML_DSA_KEY *key);
@@ -0,0 +1,189 @@
/*
* WARNING: do not edit!
* Generated by Makefile from providers/common/include/prov/der_rsa.h.in
*
* Copyright 2020-2021 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 "crypto/rsa.h"
#include "internal/der.h"
/* Well known OIDs precompiled */
/* clang-format off */
/*
* hashAlgs OBJECT IDENTIFIER ::= { nistAlgorithms 2 }
*/
#define DER_OID_V_hashAlgs DER_P_OBJECT, 8, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02
#define DER_OID_SZ_hashAlgs 10
extern const unsigned char ossl_der_oid_hashAlgs[DER_OID_SZ_hashAlgs];
/*
* rsaEncryption OBJECT IDENTIFIER ::= { pkcs-1 1 }
*/
#define DER_OID_V_rsaEncryption DER_P_OBJECT, 9, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01
#define DER_OID_SZ_rsaEncryption 11
extern const unsigned char ossl_der_oid_rsaEncryption[DER_OID_SZ_rsaEncryption];
/*
* id-RSAES-OAEP OBJECT IDENTIFIER ::= { pkcs-1 7 }
*/
#define DER_OID_V_id_RSAES_OAEP DER_P_OBJECT, 9, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x07
#define DER_OID_SZ_id_RSAES_OAEP 11
extern const unsigned char ossl_der_oid_id_RSAES_OAEP[DER_OID_SZ_id_RSAES_OAEP];
/*
* id-pSpecified OBJECT IDENTIFIER ::= { pkcs-1 9 }
*/
#define DER_OID_V_id_pSpecified DER_P_OBJECT, 9, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x09
#define DER_OID_SZ_id_pSpecified 11
extern const unsigned char ossl_der_oid_id_pSpecified[DER_OID_SZ_id_pSpecified];
/*
* id-RSASSA-PSS OBJECT IDENTIFIER ::= { pkcs-1 10 }
*/
#define DER_OID_V_id_RSASSA_PSS DER_P_OBJECT, 9, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0A
#define DER_OID_SZ_id_RSASSA_PSS 11
extern const unsigned char ossl_der_oid_id_RSASSA_PSS[DER_OID_SZ_id_RSASSA_PSS];
/*
* md2WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 2 }
*/
#define DER_OID_V_md2WithRSAEncryption DER_P_OBJECT, 9, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x02
#define DER_OID_SZ_md2WithRSAEncryption 11
extern const unsigned char ossl_der_oid_md2WithRSAEncryption[DER_OID_SZ_md2WithRSAEncryption];
/*
* md5WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 4 }
*/
#define DER_OID_V_md5WithRSAEncryption DER_P_OBJECT, 9, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x04
#define DER_OID_SZ_md5WithRSAEncryption 11
extern const unsigned char ossl_der_oid_md5WithRSAEncryption[DER_OID_SZ_md5WithRSAEncryption];
/*
* sha1WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 5 }
*/
#define DER_OID_V_sha1WithRSAEncryption DER_P_OBJECT, 9, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05
#define DER_OID_SZ_sha1WithRSAEncryption 11
extern const unsigned char ossl_der_oid_sha1WithRSAEncryption[DER_OID_SZ_sha1WithRSAEncryption];
/*
* sha224WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 14 }
*/
#define DER_OID_V_sha224WithRSAEncryption DER_P_OBJECT, 9, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0E
#define DER_OID_SZ_sha224WithRSAEncryption 11
extern const unsigned char ossl_der_oid_sha224WithRSAEncryption[DER_OID_SZ_sha224WithRSAEncryption];
/*
* sha256WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 11 }
*/
#define DER_OID_V_sha256WithRSAEncryption DER_P_OBJECT, 9, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B
#define DER_OID_SZ_sha256WithRSAEncryption 11
extern const unsigned char ossl_der_oid_sha256WithRSAEncryption[DER_OID_SZ_sha256WithRSAEncryption];
/*
* sha384WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 12 }
*/
#define DER_OID_V_sha384WithRSAEncryption DER_P_OBJECT, 9, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0C
#define DER_OID_SZ_sha384WithRSAEncryption 11
extern const unsigned char ossl_der_oid_sha384WithRSAEncryption[DER_OID_SZ_sha384WithRSAEncryption];
/*
* sha512WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 13 }
*/
#define DER_OID_V_sha512WithRSAEncryption DER_P_OBJECT, 9, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0D
#define DER_OID_SZ_sha512WithRSAEncryption 11
extern const unsigned char ossl_der_oid_sha512WithRSAEncryption[DER_OID_SZ_sha512WithRSAEncryption];
/*
* sha512-224WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 15 }
*/
#define DER_OID_V_sha512_224WithRSAEncryption DER_P_OBJECT, 9, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0F
#define DER_OID_SZ_sha512_224WithRSAEncryption 11
extern const unsigned char ossl_der_oid_sha512_224WithRSAEncryption[DER_OID_SZ_sha512_224WithRSAEncryption];
/*
* sha512-256WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 16 }
*/
#define DER_OID_V_sha512_256WithRSAEncryption DER_P_OBJECT, 9, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x10
#define DER_OID_SZ_sha512_256WithRSAEncryption 11
extern const unsigned char ossl_der_oid_sha512_256WithRSAEncryption[DER_OID_SZ_sha512_256WithRSAEncryption];
/*
* id-mgf1 OBJECT IDENTIFIER ::= { pkcs-1 8 }
*/
#define DER_OID_V_id_mgf1 DER_P_OBJECT, 9, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x08
#define DER_OID_SZ_id_mgf1 11
extern const unsigned char ossl_der_oid_id_mgf1[DER_OID_SZ_id_mgf1];
/*
* id-rsassa-pkcs1-v1_5-with-sha3-224 OBJECT IDENTIFIER ::= { sigAlgs 13 }
*/
#define DER_OID_V_id_rsassa_pkcs1_v1_5_with_sha3_224 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x0D
#define DER_OID_SZ_id_rsassa_pkcs1_v1_5_with_sha3_224 11
extern const unsigned char ossl_der_oid_id_rsassa_pkcs1_v1_5_with_sha3_224[DER_OID_SZ_id_rsassa_pkcs1_v1_5_with_sha3_224];
/*
* id-rsassa-pkcs1-v1_5-with-sha3-256 OBJECT IDENTIFIER ::= { sigAlgs 14 }
*/
#define DER_OID_V_id_rsassa_pkcs1_v1_5_with_sha3_256 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x0E
#define DER_OID_SZ_id_rsassa_pkcs1_v1_5_with_sha3_256 11
extern const unsigned char ossl_der_oid_id_rsassa_pkcs1_v1_5_with_sha3_256[DER_OID_SZ_id_rsassa_pkcs1_v1_5_with_sha3_256];
/*
* id-rsassa-pkcs1-v1_5-with-sha3-384 OBJECT IDENTIFIER ::= { sigAlgs 15 }
*/
#define DER_OID_V_id_rsassa_pkcs1_v1_5_with_sha3_384 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x0F
#define DER_OID_SZ_id_rsassa_pkcs1_v1_5_with_sha3_384 11
extern const unsigned char ossl_der_oid_id_rsassa_pkcs1_v1_5_with_sha3_384[DER_OID_SZ_id_rsassa_pkcs1_v1_5_with_sha3_384];
/*
* id-rsassa-pkcs1-v1_5-with-sha3-512 OBJECT IDENTIFIER ::= { sigAlgs 16 }
*/
#define DER_OID_V_id_rsassa_pkcs1_v1_5_with_sha3_512 DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x10
#define DER_OID_SZ_id_rsassa_pkcs1_v1_5_with_sha3_512 11
extern const unsigned char ossl_der_oid_id_rsassa_pkcs1_v1_5_with_sha3_512[DER_OID_SZ_id_rsassa_pkcs1_v1_5_with_sha3_512];
/*
* md4WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 3 }
*/
#define DER_OID_V_md4WithRSAEncryption DER_P_OBJECT, 9, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x03
#define DER_OID_SZ_md4WithRSAEncryption 11
extern const unsigned char ossl_der_oid_md4WithRSAEncryption[DER_OID_SZ_md4WithRSAEncryption];
/*
* ripemd160WithRSAEncryption OBJECT IDENTIFIER ::= {
* iso(1) identified-organization(3) teletrust(36) algorithm(3) signatureAlgorithm(3) rsaSignature(1) 2
* }
*/
#define DER_OID_V_ripemd160WithRSAEncryption DER_P_OBJECT, 6, 0x2B, 0x24, 0x03, 0x03, 0x01, 0x02
#define DER_OID_SZ_ripemd160WithRSAEncryption 8
extern const unsigned char ossl_der_oid_ripemd160WithRSAEncryption[DER_OID_SZ_ripemd160WithRSAEncryption];
/*
* mdc2WithRSASignature OBJECT IDENTIFIER ::= {
* iso(1) identified-organization(3) oiw(14) secsig(3) algorithms(2) mdc2WithRSASignature(14)
* }
*/
#define DER_OID_V_mdc2WithRSASignature DER_P_OBJECT, 5, 0x2B, 0x0E, 0x03, 0x02, 0x0E
#define DER_OID_SZ_mdc2WithRSASignature 7
extern const unsigned char ossl_der_oid_mdc2WithRSASignature[DER_OID_SZ_mdc2WithRSASignature];
/* clang-format on */
/* PSS parameters */
int ossl_DER_w_RSASSA_PSS_params(WPACKET *pkt, int tag,
const RSA_PSS_PARAMS_30 *pss);
/* Subject Public Key Info */
int ossl_DER_w_algorithmIdentifier_RSA(WPACKET *pkt, int tag, RSA *rsa);
int ossl_DER_w_algorithmIdentifier_RSA_PSS(WPACKET *pkt, int tag,
int rsa_type,
const RSA_PSS_PARAMS_30 *pss);
/* Signature */
int ossl_DER_w_algorithmIdentifier_MDWithRSAEncryption(WPACKET *pkt, int tag,
int mdnid);
@@ -0,0 +1,105 @@
/*
* WARNING: do not edit!
* Generated by Makefile from providers/common/include/prov/der_slh_dsa.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"
#include "crypto/slh_dsa.h"
/* Well known OIDs precompiled */
/* clang-format off */
/*
* id-slh-dsa-sha2-128s OBJECT IDENTIFIER ::= { sigAlgs 20 }
*/
#define DER_OID_V_id_slh_dsa_sha2_128s DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x14
#define DER_OID_SZ_id_slh_dsa_sha2_128s 11
extern const unsigned char ossl_der_oid_id_slh_dsa_sha2_128s[DER_OID_SZ_id_slh_dsa_sha2_128s];
/*
* id-slh-dsa-sha2-128f OBJECT IDENTIFIER ::= { sigAlgs 21 }
*/
#define DER_OID_V_id_slh_dsa_sha2_128f DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x15
#define DER_OID_SZ_id_slh_dsa_sha2_128f 11
extern const unsigned char ossl_der_oid_id_slh_dsa_sha2_128f[DER_OID_SZ_id_slh_dsa_sha2_128f];
/*
* id-slh-dsa-sha2-192s OBJECT IDENTIFIER ::= { sigAlgs 22 }
*/
#define DER_OID_V_id_slh_dsa_sha2_192s DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x16
#define DER_OID_SZ_id_slh_dsa_sha2_192s 11
extern const unsigned char ossl_der_oid_id_slh_dsa_sha2_192s[DER_OID_SZ_id_slh_dsa_sha2_192s];
/*
* id-slh-dsa-sha2-192f OBJECT IDENTIFIER ::= { sigAlgs 23 }
*/
#define DER_OID_V_id_slh_dsa_sha2_192f DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x17
#define DER_OID_SZ_id_slh_dsa_sha2_192f 11
extern const unsigned char ossl_der_oid_id_slh_dsa_sha2_192f[DER_OID_SZ_id_slh_dsa_sha2_192f];
/*
* id-slh-dsa-sha2-256s OBJECT IDENTIFIER ::= { sigAlgs 24 }
*/
#define DER_OID_V_id_slh_dsa_sha2_256s DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x18
#define DER_OID_SZ_id_slh_dsa_sha2_256s 11
extern const unsigned char ossl_der_oid_id_slh_dsa_sha2_256s[DER_OID_SZ_id_slh_dsa_sha2_256s];
/*
* id-slh-dsa-sha2-256f OBJECT IDENTIFIER ::= { sigAlgs 25 }
*/
#define DER_OID_V_id_slh_dsa_sha2_256f DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x19
#define DER_OID_SZ_id_slh_dsa_sha2_256f 11
extern const unsigned char ossl_der_oid_id_slh_dsa_sha2_256f[DER_OID_SZ_id_slh_dsa_sha2_256f];
/*
* id-slh-dsa-shake-128s OBJECT IDENTIFIER ::= { sigAlgs 26 }
*/
#define DER_OID_V_id_slh_dsa_shake_128s DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x1A
#define DER_OID_SZ_id_slh_dsa_shake_128s 11
extern const unsigned char ossl_der_oid_id_slh_dsa_shake_128s[DER_OID_SZ_id_slh_dsa_shake_128s];
/*
* id-slh-dsa-shake-128f OBJECT IDENTIFIER ::= { sigAlgs 27 }
*/
#define DER_OID_V_id_slh_dsa_shake_128f DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x1B
#define DER_OID_SZ_id_slh_dsa_shake_128f 11
extern const unsigned char ossl_der_oid_id_slh_dsa_shake_128f[DER_OID_SZ_id_slh_dsa_shake_128f];
/*
* id-slh-dsa-shake-192s OBJECT IDENTIFIER ::= { sigAlgs 28 }
*/
#define DER_OID_V_id_slh_dsa_shake_192s DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x1C
#define DER_OID_SZ_id_slh_dsa_shake_192s 11
extern const unsigned char ossl_der_oid_id_slh_dsa_shake_192s[DER_OID_SZ_id_slh_dsa_shake_192s];
/*
* id-slh-dsa-shake-192f OBJECT IDENTIFIER ::= { sigAlgs 29 }
*/
#define DER_OID_V_id_slh_dsa_shake_192f DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x1D
#define DER_OID_SZ_id_slh_dsa_shake_192f 11
extern const unsigned char ossl_der_oid_id_slh_dsa_shake_192f[DER_OID_SZ_id_slh_dsa_shake_192f];
/*
* id-slh-dsa-shake-256s OBJECT IDENTIFIER ::= { sigAlgs 30 }
*/
#define DER_OID_V_id_slh_dsa_shake_256s DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x1E
#define DER_OID_SZ_id_slh_dsa_shake_256s 11
extern const unsigned char ossl_der_oid_id_slh_dsa_shake_256s[DER_OID_SZ_id_slh_dsa_shake_256s];
/*
* id-slh-dsa-shake-256f OBJECT IDENTIFIER ::= { sigAlgs 31 }
*/
#define DER_OID_V_id_slh_dsa_shake_256f DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x1F
#define DER_OID_SZ_id_slh_dsa_shake_256f 11
extern const unsigned char ossl_der_oid_id_slh_dsa_shake_256f[DER_OID_SZ_id_slh_dsa_shake_256f];
/* clang-format on */
int ossl_DER_w_algorithmIdentifier_SLH_DSA(WPACKET *pkt, int tag, SLH_DSA_KEY *key);
@@ -0,0 +1,39 @@
/*
* WARNING: do not edit!
* Generated by Makefile from providers/common/include/prov/der_sm2.h.in
*
* Copyright 2020-2021 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 "crypto/ec.h"
#include "internal/der.h"
/* Well known OIDs precompiled */
/* clang-format off */
/*
* sm2-with-SM3 OBJECT IDENTIFIER ::= { sm-scheme 501 }
*/
#define DER_OID_V_sm2_with_SM3 DER_P_OBJECT, 8, 0x2A, 0x81, 0x1C, 0xCF, 0x55, 0x01, 0x83, 0x75
#define DER_OID_SZ_sm2_with_SM3 10
extern const unsigned char ossl_der_oid_sm2_with_SM3[DER_OID_SZ_sm2_with_SM3];
/*
* curveSM2 OBJECT IDENTIFIER ::= { sm-scheme 301 }
*/
#define DER_OID_V_curveSM2 DER_P_OBJECT, 8, 0x2A, 0x81, 0x1C, 0xCF, 0x55, 0x01, 0x82, 0x2D
#define DER_OID_SZ_curveSM2 10
extern const unsigned char ossl_der_oid_curveSM2[DER_OID_SZ_curveSM2];
/* clang-format on */
/* Subject Public Key Info */
int ossl_DER_w_algorithmIdentifier_SM2(WPACKET *pkt, int cont, EC_KEY *ec);
/* Signature */
int ossl_DER_w_algorithmIdentifier_SM2_with_MD(WPACKET *pkt, int cont,
EC_KEY *ec, int mdnid);
@@ -0,0 +1,48 @@
/*
* WARNING: do not edit!
* Generated by Makefile from providers/common/include/prov/der_wrap.h.in
*
* Copyright 2020-2021 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-CMS3DESwrap OBJECT IDENTIFIER ::= {
* iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) alg(3) 6
* }
*/
#define DER_OID_V_id_alg_CMS3DESwrap DER_P_OBJECT, 11, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x10, 0x03, 0x06
#define DER_OID_SZ_id_alg_CMS3DESwrap 13
extern const unsigned char ossl_der_oid_id_alg_CMS3DESwrap[DER_OID_SZ_id_alg_CMS3DESwrap];
/*
* id-aes128-wrap OBJECT IDENTIFIER ::= { aes 5 }
*/
#define DER_OID_V_id_aes128_wrap DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x01, 0x05
#define DER_OID_SZ_id_aes128_wrap 11
extern const unsigned char ossl_der_oid_id_aes128_wrap[DER_OID_SZ_id_aes128_wrap];
/*
* id-aes192-wrap OBJECT IDENTIFIER ::= { aes 25 }
*/
#define DER_OID_V_id_aes192_wrap DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x01, 0x19
#define DER_OID_SZ_id_aes192_wrap 11
extern const unsigned char ossl_der_oid_id_aes192_wrap[DER_OID_SZ_id_aes192_wrap];
/*
* id-aes256-wrap OBJECT IDENTIFIER ::= { aes 45 }
*/
#define DER_OID_V_id_aes256_wrap DER_P_OBJECT, 9, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x01, 0x2D
#define DER_OID_SZ_id_aes256_wrap 11
extern const unsigned char ossl_der_oid_id_aes256_wrap[DER_OID_SZ_id_aes256_wrap];
/* clang-format on */
@@ -0,0 +1,5 @@
{
global:
OSSL_provider_init;
local: *;
};
@@ -0,0 +1,5 @@
{
global:
OSSL_provider_init;
local: *;
};
@@ -0,0 +1,404 @@
/*
* WARNING: do not edit!
* Generated by apps/progs.pl
*
* 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
*/
#include "progs.h"
FUNCTION functions[] = {
{FT_general, "asn1parse", asn1parse_main, asn1parse_options, NULL, NULL},
{FT_general, "ca", ca_main, ca_options, NULL, NULL},
#ifndef OPENSSL_NO_SOCK
{FT_general, "ciphers", ciphers_main, ciphers_options, NULL, NULL},
#endif
#ifndef OPENSSL_NO_CMP
{FT_general, "cmp", cmp_main, cmp_options, NULL, NULL},
#endif
#ifndef OPENSSL_NO_CMS
{FT_general, "cms", cms_main, cms_options, NULL, NULL},
#endif
{FT_general, "crl", crl_main, crl_options, NULL, NULL},
{FT_general, "crl2pkcs7", crl2pkcs7_main, crl2pkcs7_options, NULL, NULL},
{FT_general, "dgst", dgst_main, dgst_options, NULL, NULL},
#ifndef OPENSSL_NO_DH
{FT_general, "dhparam", dhparam_main, dhparam_options, NULL, NULL},
#endif
#ifndef OPENSSL_NO_DSA
{FT_general, "dsa", dsa_main, dsa_options, NULL, NULL},
#endif
#ifndef OPENSSL_NO_DSA
{FT_general, "dsaparam", dsaparam_main, dsaparam_options, NULL, NULL},
#endif
#ifndef OPENSSL_NO_EC
{FT_general, "ec", ec_main, ec_options, NULL, NULL},
#endif
#ifndef OPENSSL_NO_EC
{FT_general, "ecparam", ecparam_main, ecparam_options, NULL, NULL},
#endif
{FT_general, "enc", enc_main, enc_options, NULL, NULL},
#ifndef OPENSSL_NO_ENGINE
{FT_general, "engine", engine_main, engine_options, NULL, NULL},
#endif
{FT_general, "errstr", errstr_main, errstr_options, NULL, NULL},
{FT_general, "fipsinstall", fipsinstall_main, fipsinstall_options, NULL, NULL},
#ifndef OPENSSL_NO_DSA
{FT_general, "gendsa", gendsa_main, gendsa_options, NULL, NULL},
#endif
{FT_general, "genpkey", genpkey_main, genpkey_options, NULL, NULL},
#ifndef OPENSSL_NO_RSA
{FT_general, "genrsa", genrsa_main, genrsa_options, NULL, NULL},
#endif
{FT_general, "help", help_main, help_options, NULL, NULL},
{FT_general, "info", info_main, info_options, NULL, NULL},
{FT_general, "kdf", kdf_main, kdf_options, NULL, NULL},
{FT_general, "list", list_main, list_options, NULL, NULL},
{FT_general, "mac", mac_main, mac_options, NULL, NULL},
{FT_general, "nseq", nseq_main, nseq_options, NULL, NULL},
#ifndef OPENSSL_NO_OCSP
{FT_general, "ocsp", ocsp_main, ocsp_options, NULL, NULL},
#endif
{FT_general, "passwd", passwd_main, passwd_options, NULL, NULL},
{FT_general, "pkcs12", pkcs12_main, pkcs12_options, NULL, NULL},
{FT_general, "pkcs7", pkcs7_main, pkcs7_options, NULL, NULL},
{FT_general, "pkcs8", pkcs8_main, pkcs8_options, NULL, NULL},
{FT_general, "pkey", pkey_main, pkey_options, NULL, NULL},
{FT_general, "pkeyparam", pkeyparam_main, pkeyparam_options, NULL, NULL},
{FT_general, "pkeyutl", pkeyutl_main, pkeyutl_options, NULL, NULL},
{FT_general, "prime", prime_main, prime_options, NULL, NULL},
{FT_general, "rand", rand_main, rand_options, NULL, NULL},
{FT_general, "rehash", rehash_main, rehash_options, NULL, NULL},
{FT_general, "req", req_main, req_options, NULL, NULL},
{FT_general, "rsa", rsa_main, rsa_options, NULL, NULL},
#if !defined(OPENSSL_NO_DEPRECATED_3_0) && !defined(OPENSSL_NO_RSA)
{FT_general, "rsautl", rsautl_main, rsautl_options, "pkeyutl", "3.0"},
#endif
#ifndef OPENSSL_NO_SOCK
{FT_general, "s_client", s_client_main, s_client_options, NULL, NULL},
#endif
#ifndef OPENSSL_NO_SOCK
{FT_general, "s_server", s_server_main, s_server_options, NULL, NULL},
#endif
#ifndef OPENSSL_NO_SOCK
{FT_general, "s_time", s_time_main, s_time_options, NULL, NULL},
#endif
{FT_general, "sess_id", sess_id_main, sess_id_options, NULL, NULL},
{FT_general, "skeyutl", skeyutl_main, skeyutl_options, NULL, NULL},
{FT_general, "smime", smime_main, smime_options, NULL, NULL},
{FT_general, "speed", speed_main, speed_options, NULL, NULL},
{FT_general, "spkac", spkac_main, spkac_options, NULL, NULL},
#ifndef OPENSSL_NO_SRP
{FT_general, "srp", srp_main, srp_options, NULL, NULL},
#endif
{FT_general, "storeutl", storeutl_main, storeutl_options, NULL, NULL},
#ifndef OPENSSL_NO_TS
{FT_general, "ts", ts_main, ts_options, NULL, NULL},
#endif
{FT_general, "verify", verify_main, verify_options, NULL, NULL},
{FT_general, "version", version_main, version_options, NULL, NULL},
{FT_general, "x509", x509_main, x509_options, NULL, NULL},
#ifndef OPENSSL_NO_MD2
{FT_md, "md2", dgst_main, NULL, NULL},
#endif
#ifndef OPENSSL_NO_MD4
{FT_md, "md4", dgst_main, NULL, NULL},
#endif
{FT_md, "md5", dgst_main, NULL, NULL},
{FT_md, "sha1", dgst_main, NULL, NULL},
{FT_md, "sha224", dgst_main, NULL, NULL},
{FT_md, "sha256", dgst_main, NULL, NULL},
{FT_md, "sha384", dgst_main, NULL, NULL},
{FT_md, "sha512", dgst_main, NULL, NULL},
{FT_md, "sha512-224", dgst_main, NULL, NULL},
{FT_md, "sha512-256", dgst_main, NULL, NULL},
{FT_md, "sha3-224", dgst_main, NULL, NULL},
{FT_md, "sha3-256", dgst_main, NULL, NULL},
{FT_md, "sha3-384", dgst_main, NULL, NULL},
{FT_md, "sha3-512", dgst_main, NULL, NULL},
{FT_md, "shake128", dgst_main, NULL, NULL},
{FT_md, "shake256", dgst_main, NULL, NULL},
#ifndef OPENSSL_NO_MDC2
{FT_md, "mdc2", dgst_main, NULL, NULL},
#endif
#ifndef OPENSSL_NO_RMD160
{FT_md, "rmd160", dgst_main, NULL, NULL},
#endif
#ifndef OPENSSL_NO_BLAKE2
{FT_md, "blake2b512", dgst_main, NULL, NULL},
#endif
#ifndef OPENSSL_NO_BLAKE2
{FT_md, "blake2s256", dgst_main, NULL, NULL},
#endif
#ifndef OPENSSL_NO_SM3
{FT_md, "sm3", dgst_main, NULL, NULL},
#endif
{FT_cipher, "aes-128-cbc", enc_main, enc_options, NULL},
{FT_cipher, "aes-128-ecb", enc_main, enc_options, NULL},
{FT_cipher, "aes-192-cbc", enc_main, enc_options, NULL},
{FT_cipher, "aes-192-ecb", enc_main, enc_options, NULL},
{FT_cipher, "aes-256-cbc", enc_main, enc_options, NULL},
{FT_cipher, "aes-256-ecb", enc_main, enc_options, NULL},
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-128-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-128-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-128-ctr", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-128-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-128-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-128-cfb1", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-128-cfb8", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-192-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-192-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-192-ctr", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-192-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-192-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-192-cfb1", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-192-cfb8", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-256-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-256-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-256-ctr", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-256-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-256-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-256-cfb1", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ARIA
{FT_cipher, "aria-256-cfb8", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAMELLIA
{FT_cipher, "camellia-128-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAMELLIA
{FT_cipher, "camellia-128-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAMELLIA
{FT_cipher, "camellia-192-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAMELLIA
{FT_cipher, "camellia-192-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAMELLIA
{FT_cipher, "camellia-256-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAMELLIA
{FT_cipher, "camellia-256-ecb", enc_main, enc_options, NULL},
#endif
{FT_cipher, "base64", enc_main, enc_options, NULL},
#ifndef OPENSSL_NO_ZLIB
{FT_cipher, "zlib", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_BROTLI
{FT_cipher, "brotli", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_ZSTD
{FT_cipher, "zstd", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des3", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "desx", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_IDEA
{FT_cipher, "idea", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_SEED
{FT_cipher, "seed", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC4
{FT_cipher, "rc4", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC4
{FT_cipher, "rc4-40", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC2
{FT_cipher, "rc2", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_BF
{FT_cipher, "bf", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAST
{FT_cipher, "cast", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC5
{FT_cipher, "rc5", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-ede", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-ede3", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-ede-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-ede3-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-ede-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-ede3-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-ede-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_DES
{FT_cipher, "des-ede3-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_IDEA
{FT_cipher, "idea-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_IDEA
{FT_cipher, "idea-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_IDEA
{FT_cipher, "idea-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_IDEA
{FT_cipher, "idea-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_SEED
{FT_cipher, "seed-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_SEED
{FT_cipher, "seed-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_SEED
{FT_cipher, "seed-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_SEED
{FT_cipher, "seed-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC2
{FT_cipher, "rc2-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC2
{FT_cipher, "rc2-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC2
{FT_cipher, "rc2-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC2
{FT_cipher, "rc2-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC2
{FT_cipher, "rc2-64-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC2
{FT_cipher, "rc2-40-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_BF
{FT_cipher, "bf-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_BF
{FT_cipher, "bf-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_BF
{FT_cipher, "bf-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_BF
{FT_cipher, "bf-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAST
{FT_cipher, "cast5-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAST
{FT_cipher, "cast5-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAST
{FT_cipher, "cast5-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAST
{FT_cipher, "cast5-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_CAST
{FT_cipher, "cast-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC5
{FT_cipher, "rc5-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC5
{FT_cipher, "rc5-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC5
{FT_cipher, "rc5-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_RC5
{FT_cipher, "rc5-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_SM4
{FT_cipher, "sm4-cbc", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_SM4
{FT_cipher, "sm4-ecb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_SM4
{FT_cipher, "sm4-cfb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_SM4
{FT_cipher, "sm4-ofb", enc_main, enc_options, NULL},
#endif
#ifndef OPENSSL_NO_SM4
{FT_cipher, "sm4-ctr", enc_main, enc_options, NULL},
#endif
{0, NULL, NULL, NULL, NULL}
};
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,694 @@
.text
.balign 16
.globl rv64i_zkne_encrypt
.type rv64i_zkne_encrypt,@function
rv64i_zkne_encrypt:
addi sp,sp,-16
sd x8,8(sp)
sd x9,0(sp)
# Load input to block cipher
ld x6,0(x10)
ld x7,8(x10)
# Load key
ld x13,0(x12)
ld x14,8(x12)
# Load number of rounds
lwu x30,240(x12)
# initial transformation
xor x6,x6,x13
xor x7,x7,x14
# The main loop only executes the first N-1 rounds.
add x30,x30,-1
# Do Nr - 1 rounds (final round is special)
1:
.word 913507379
.word 912491699
# Update key ptr to point to next key in schedule
add x12,x12,16
# Grab next key in schedule
ld x13,0(x12)
ld x14,8(x12)
xor x6,x8,x13
xor x7,x9,x14
add x30,x30,-1
bgtz x30,1b
# final round
.word 846398515
.word 845382835
# since not added 16 before
ld x13,16(x12)
ld x14,24(x12)
xor x6,x8,x13
xor x7,x9,x14
sd x6,0(x11)
sd x7,8(x11)
# Pop registers and return
ld x8,8(sp)
ld x9,0(sp)
addi sp,sp,16
ret
.text
.balign 16
.globl rv64i_zknd_decrypt
.type rv64i_zknd_decrypt,@function
rv64i_zknd_decrypt:
addi sp,sp,-16
sd x8,8(sp)
sd x9,0(sp)
# Load input to block cipher
ld x6,0(x10)
ld x7,8(x10)
# Load number of rounds
lwu x30,240(x12)
# Load the last key
slli x13,x30,4
add x12,x12,x13
ld x13,0(x12)
ld x14,8(x12)
xor x6,x6,x13
xor x7,x7,x14
# The main loop only executes the first N-1 rounds.
add x30,x30,-1
# Do Nr - 1 rounds (final round is special)
1:
.word 1047725107
.word 1046709427
# Update key ptr to point to next key in schedule
add x12,x12,-16
# Grab next key in schedule
ld x13,0(x12)
ld x14,8(x12)
xor x6,x8,x13
xor x7,x9,x14
add x30,x30,-1
bgtz x30,1b
# final round
.word 980616243
.word 979600563
add x12,x12,-16
ld x13,0(x12)
ld x14,8(x12)
xor x6,x8,x13
xor x7,x9,x14
sd x6,0(x11)
sd x7,8(x11)
# Pop registers and return
ld x8,8(sp)
ld x9,0(sp)
addi sp,sp,16
ret
.text
.balign 16
.globl rv64i_zkne_set_encrypt_key
.type rv64i_zkne_set_encrypt_key,@function
rv64i_zkne_set_encrypt_key:
addi sp,sp,-16
sd x8,0(sp)
# Determine number of rounds from key size in bits
li x6,128
bne x11,x6,1f
li x7,10 # key->rounds = 10 if bits == 128
sw x7,240(x12) # store key->rounds
ld x6,0(x10)
ld x7,8(x10)
sd x6,0(x12)
sd x7,8(x12)
.word 822318099
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
.word 823366675
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
.word 824415251
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
.word 825463827
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
.word 826512403
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
.word 827560979
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
.word 828609555
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
.word 829658131
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
.word 830706707
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
.word 831755283
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
j 4f
1:
li x6,192
bne x11,x6,2f
li x7,12 # key->rounds = 12 if bits == 192
sw x7,240(x12) # store key->rounds
ld x6,0(x10)
ld x7,8(x10)
ld x8,16(x10)
sd x6,0(x12)
sd x7,8(x12)
sd x8,16(x12)
.word 822351507
.word 2120647475
.word 2121466803
.word 2122548275
add x12,x12,24
sd x6,0(x12)
sd x7,8(x12)
sd x8,16(x12)
.word 823400083
.word 2120647475
.word 2121466803
.word 2122548275
add x12,x12,24
sd x6,0(x12)
sd x7,8(x12)
sd x8,16(x12)
.word 824448659
.word 2120647475
.word 2121466803
.word 2122548275
add x12,x12,24
sd x6,0(x12)
sd x7,8(x12)
sd x8,16(x12)
.word 825497235
.word 2120647475
.word 2121466803
.word 2122548275
add x12,x12,24
sd x6,0(x12)
sd x7,8(x12)
sd x8,16(x12)
.word 826545811
.word 2120647475
.word 2121466803
.word 2122548275
add x12,x12,24
sd x6,0(x12)
sd x7,8(x12)
sd x8,16(x12)
.word 827594387
.word 2120647475
.word 2121466803
.word 2122548275
add x12,x12,24
sd x6,0(x12)
sd x7,8(x12)
sd x8,16(x12)
.word 828642963
.word 2120647475
.word 2121466803
.word 2122548275
add x12,x12,24
sd x6,0(x12)
sd x7,8(x12)
sd x8,16(x12)
.word 829691539
.word 2120647475
.word 2121466803
add x12,x12,24
sd x6,0(x12)
sd x7,8(x12)
j 4f
2:
li x7,14 # key->rounds = 14 if bits == 256
li x6,256
beq x11,x6,3f
li a0,-2 # If bits != 128, 192, or 256, return -2
j 5f
3:
sw x7,240(x12) # store key->rounds
ld x6,0(x10)
ld x7,8(x10)
ld x8,16(x10)
ld x13,24(x10)
sd x6,0(x12)
sd x7,8(x12)
sd x8,16(x12)
sd x13,24(x12)
.word 822515475
.word 2120680243
.word 2121466803
add x12,x12,32
sd x6,0(x12)
sd x7,8(x12)
.word 832804627
.word 2122777651
.word 2127824563
sd x8,16(x12)
sd x13,24(x12)
.word 823564051
.word 2120680243
.word 2121466803
add x12,x12,32
sd x6,0(x12)
sd x7,8(x12)
.word 832804627
.word 2122777651
.word 2127824563
sd x8,16(x12)
sd x13,24(x12)
.word 824612627
.word 2120680243
.word 2121466803
add x12,x12,32
sd x6,0(x12)
sd x7,8(x12)
.word 832804627
.word 2122777651
.word 2127824563
sd x8,16(x12)
sd x13,24(x12)
.word 825661203
.word 2120680243
.word 2121466803
add x12,x12,32
sd x6,0(x12)
sd x7,8(x12)
.word 832804627
.word 2122777651
.word 2127824563
sd x8,16(x12)
sd x13,24(x12)
.word 826709779
.word 2120680243
.word 2121466803
add x12,x12,32
sd x6,0(x12)
sd x7,8(x12)
.word 832804627
.word 2122777651
.word 2127824563
sd x8,16(x12)
sd x13,24(x12)
.word 827758355
.word 2120680243
.word 2121466803
add x12,x12,32
sd x6,0(x12)
sd x7,8(x12)
.word 832804627
.word 2122777651
.word 2127824563
sd x8,16(x12)
sd x13,24(x12)
.word 828806931
.word 2120680243
.word 2121466803
add x12,x12,32
sd x6,0(x12)
sd x7,8(x12)
4: # return 0
li a0,0
5: # return a0
ld x8,0(sp)
addi sp,sp,16
ret
.text
.balign 16
.globl rv64i_zknd_set_decrypt_key
.type rv64i_zknd_set_decrypt_key,@function
rv64i_zknd_set_decrypt_key:
addi sp,sp,-16
sd x8,0(sp)
# Determine number of rounds from key size in bits
li x6,128
bne x11,x6,1f
li x7,10 # key->rounds = 10 if bits == 128
sw x7,240(x12) # store key->rounds
ld x6,0(x10)
ld x7,8(x10)
sd x6,0(x12)
sd x7,8(x12)
.word 822318099
.word 2120483635
.word 2121466803
add x12,x12,16
.word 805508115
sd x8,0(x12)
.word 805540883
sd x8,8(x12)
.word 823366675
.word 2120483635
.word 2121466803
add x12,x12,16
.word 805508115
sd x8,0(x12)
.word 805540883
sd x8,8(x12)
.word 824415251
.word 2120483635
.word 2121466803
add x12,x12,16
.word 805508115
sd x8,0(x12)
.word 805540883
sd x8,8(x12)
.word 825463827
.word 2120483635
.word 2121466803
add x12,x12,16
.word 805508115
sd x8,0(x12)
.word 805540883
sd x8,8(x12)
.word 826512403
.word 2120483635
.word 2121466803
add x12,x12,16
.word 805508115
sd x8,0(x12)
.word 805540883
sd x8,8(x12)
.word 827560979
.word 2120483635
.word 2121466803
add x12,x12,16
.word 805508115
sd x8,0(x12)
.word 805540883
sd x8,8(x12)
.word 828609555
.word 2120483635
.word 2121466803
add x12,x12,16
.word 805508115
sd x8,0(x12)
.word 805540883
sd x8,8(x12)
.word 829658131
.word 2120483635
.word 2121466803
add x12,x12,16
.word 805508115
sd x8,0(x12)
.word 805540883
sd x8,8(x12)
.word 830706707
.word 2120483635
.word 2121466803
add x12,x12,16
.word 805508115
sd x8,0(x12)
.word 805540883
sd x8,8(x12)
.word 831755283
.word 2120483635
.word 2121466803
add x12,x12,16
sd x6,0(x12)
sd x7,8(x12)
j 4f
1:
li x6,192
bne x11,x6,2f
li x7,12 # key->rounds = 12 if bits == 192
sw x7,240(x12) # store key->rounds
ld x6,0(x10)
ld x7,8(x10)
ld x8,16(x10)
sd x6,0(x12)
sd x7,8(x12)
.word 805574291
sd x13,16(x12)
.word 822351507
.word 2120647475
.word 2121466803
add x12,x12,24
.word 805508755
sd x13,0(x12)
.word 805541523
sd x13,8(x12)
# the reason is in ke192enc
.word 2122548275
.word 805574291
sd x13,16(x12)
.word 823400083
.word 2120647475
.word 2121466803
add x12,x12,24
.word 805508755
sd x13,0(x12)
.word 805541523
sd x13,8(x12)
# the reason is in ke192enc
.word 2122548275
.word 805574291
sd x13,16(x12)
.word 824448659
.word 2120647475
.word 2121466803
add x12,x12,24
.word 805508755
sd x13,0(x12)
.word 805541523
sd x13,8(x12)
# the reason is in ke192enc
.word 2122548275
.word 805574291
sd x13,16(x12)
.word 825497235
.word 2120647475
.word 2121466803
add x12,x12,24
.word 805508755
sd x13,0(x12)
.word 805541523
sd x13,8(x12)
# the reason is in ke192enc
.word 2122548275
.word 805574291
sd x13,16(x12)
.word 826545811
.word 2120647475
.word 2121466803
add x12,x12,24
.word 805508755
sd x13,0(x12)
.word 805541523
sd x13,8(x12)
# the reason is in ke192enc
.word 2122548275
.word 805574291
sd x13,16(x12)
.word 827594387
.word 2120647475
.word 2121466803
add x12,x12,24
.word 805508755
sd x13,0(x12)
.word 805541523
sd x13,8(x12)
# the reason is in ke192enc
.word 2122548275
.word 805574291
sd x13,16(x12)
.word 828642963
.word 2120647475
.word 2121466803
add x12,x12,24
.word 805508755
sd x13,0(x12)
.word 805541523
sd x13,8(x12)
# the reason is in ke192enc
.word 2122548275
.word 805574291
sd x13,16(x12)
.word 829691539
.word 2120647475
.word 2121466803
add x12,x12,24
sd x6,0(x12)
sd x7,8(x12)
j 4f
2:
li x7,14 # key->rounds = 14 if bits == 256
li x6,256
beq x11,x6,3f
li a0,-2 # If bits != 128, 192, or 256, return -2
j 5f
3:
sw x7,240(x12) # store key->rounds
ld x6,0(x10)
ld x7,8(x10)
ld x8,16(x10)
ld x13,24(x10)
sd x6,0(x12)
sd x7,8(x12)
.word 805574419
sd x14,16(x12)
.word 805738259
sd x14,24(x12)
.word 822515475
.word 2120680243
.word 2121466803
add x12,x12,32
.word 832804627
.word 2122777651
.word 2127824563
.word 805508883
sd x14,0(x12)
.word 805541651
sd x14,8(x12)
.word 805574419
sd x14,16(x12)
.word 805738259
sd x14,24(x12)
.word 823564051
.word 2120680243
.word 2121466803
add x12,x12,32
.word 832804627
.word 2122777651
.word 2127824563
.word 805508883
sd x14,0(x12)
.word 805541651
sd x14,8(x12)
.word 805574419
sd x14,16(x12)
.word 805738259
sd x14,24(x12)
.word 824612627
.word 2120680243
.word 2121466803
add x12,x12,32
.word 832804627
.word 2122777651
.word 2127824563
.word 805508883
sd x14,0(x12)
.word 805541651
sd x14,8(x12)
.word 805574419
sd x14,16(x12)
.word 805738259
sd x14,24(x12)
.word 825661203
.word 2120680243
.word 2121466803
add x12,x12,32
.word 832804627
.word 2122777651
.word 2127824563
.word 805508883
sd x14,0(x12)
.word 805541651
sd x14,8(x12)
.word 805574419
sd x14,16(x12)
.word 805738259
sd x14,24(x12)
.word 826709779
.word 2120680243
.word 2121466803
add x12,x12,32
.word 832804627
.word 2122777651
.word 2127824563
.word 805508883
sd x14,0(x12)
.word 805541651
sd x14,8(x12)
.word 805574419
sd x14,16(x12)
.word 805738259
sd x14,24(x12)
.word 827758355
.word 2120680243
.word 2121466803
add x12,x12,32
.word 832804627
.word 2122777651
.word 2127824563
.word 805508883
sd x14,0(x12)
.word 805541651
sd x14,8(x12)
.word 805574419
sd x14,16(x12)
.word 805738259
sd x14,24(x12)
.word 828806931
.word 2120680243
.word 2121466803
add x12,x12,32
sd x6,0(x12)
sd x7,8(x12)
# last two one dropped
4: # return 0
li a0,0
5: # return a0
ld x8,0(sp)
addi sp,sp,16
ret
@@ -0,0 +1,943 @@
.text
.p2align 3
.globl rv64i_zvbb_zvkg_zvkned_aes_xts_encrypt
.type rv64i_zvbb_zvkg_zvkned_aes_xts_encrypt,@function
rv64i_zvbb_zvkg_zvkned_aes_xts_encrypt:
# Load number of rounds
lwu t0, 240(a4)
.word 3439489111
.word 34074119
.word 34041479
.word 2815667831
addi t0, t0, -1
addi a4, a4, 16
1:
.word 34041479
.word 2815503991
addi t0, t0, -1
addi a4, a4, 16
bnez t0, 1b
.word 34041479
.word 2815536759
# aes block size is 16
andi a6, a2, 15
mv t3, a2
beqz a6, 1f
sub a2, a2, a6
addi t3, a2, -16
1:
# We make the `LENGTH` become e32 length here.
srli t4, a2, 2
srli t3, t3, 2
# Load number of rounds
lwu t0, 240(a3)
li t1, 14
li t2, 10
beq t0, t1, aes_xts_enc_256
beq t0, t2, aes_xts_enc_128
.size rv64i_zvbb_zvkg_zvkned_aes_xts_encrypt,.-rv64i_zvbb_zvkg_zvkned_aes_xts_encrypt
.p2align 3
aes_xts_enc_128:
# load input
.word 221182167
.word 33909767
li t0, 5
# We could simplify the initialization steps if we have `block<=1`.
blt t4, t0, 1f
# Note: We use `vgmul` for GF(2^128) multiplication. The `vgmul` uses
# different order of coefficients. We should use`vbrev8` to reverse the
# data when we use `vgmul`.
.word 3439489111
.word 1271144535
.word 221179991
.word 1577072727
# v16: [r-IV0, r-IV0, ...]
.word 2785257591
# Prepare GF(2^128) multiplier [1, x, x^2, x^3, ...] in v8.
slli t0, t4, 2
.word 218296407
# v2: [`1`, `1`, `1`, `1`, ...]
.word 1577103703
# v3: [`0`, `1`, `2`, `3`, ...]
.word 1376297431
.word 227733591
# v4: [`1`, 0, `1`, 0, `1`, 0, `1`, 0, ...]
.word 1243816535
# v6: [`0`, 0, `1`, 0, `2`, 0, `3`, 0, ...]
.word 1244865367
slli t0, t4, 1
.word 219344983
# v8: [1<<0=1, 0, 0, 0, 1<<1=x, 0, 0, 0, 1<<2=x^2, 0, 0, 0, ...]
.word 3594716247
# Compute [r-IV0*1, r-IV0*x, r-IV0*x^2, r-IV0*x^3, ...] in v16
.word 221179991
.word 1250174039
.word 2726865015
# Compute [IV0*1, IV0*x, IV0*x^2, IV0*x^3, ...] in v28.
# Reverse the bits order back.
.word 1258565207
# Prepare the x^n multiplier in v20. The `n` is the aes-xts block number
# in a LMUL=4 register group.
# n = ((VLEN*LMUL)/(32*4)) = ((VLEN*4)/(32*4))
# = (VLEN/32)
# We could use vsetvli with `e32, m1` to compute the `n` number.
.word 218133207
li t1, 1
sll t0, t1, t0
.word 3447812183
.word 1577070679
.word 3380670551
.word 1577238615
.word 3447812183
.word 1241784407
.word 221179991
.word 1577073239
.word 2785258103
j 2f
1:
.word 3439489111
.word 1271146583
2:
.word 3439489111
.word 34005127
addi a3, a3, 16
.word 34005255
addi a3, a3, 16
.word 34005383
addi a3, a3, 16
.word 34005511
addi a3, a3, 16
.word 34005639
addi a3, a3, 16
.word 34005767
addi a3, a3, 16
.word 34005895
addi a3, a3, 16
.word 34006023
addi a3, a3, 16
.word 34006151
addi a3, a3, 16
.word 34006279
addi a3, a3, 16
.word 34006407
.word 221182167
j 1f
.Lenc_blocks_128:
.word 221182167
# load plaintext into v24
.word 33909767
# update iv
.word 2739447927
# reverse the iv's bits order back
.word 1258565207
1:
.word 797838423
slli t0, a7, 2
sub t4, t4, a7
add a0, a0, t0
.word 2786307191
.word 2787191927
.word 2788240503
.word 2789289079
.word 2790337655
.word 2791386231
.word 2792434807
.word 2793483383
.word 2794531959
.word 2795580535
.word 2796661879
.word 797838423
# store ciphertext
.word 221147223
.word 33942567
add a1, a1, t0
sub t3, t3, a7
bnez t4, .Lenc_blocks_128
bnez a6, 1f
ret
1:
# slidedown second to last block
addi a7, a7, -4
.word 3441586263
# ciphertext
.word 1065929815
# multiplier
.word 1057540183
.word 3439489111
.word 1577848023
# load last block into v24
# note: We should load the last block before store the second to last block
# for in-place operation.
.word 134770775
.word 33885191
# setup `x` multiplier with byte-reversed order
# 0b00000010 => 0b01000000 (0x40)
li t0, 0x40
.word 3439489111
.word 1577074263
.word 3355504727
.word 1577242199
# compute IV for last block
.word 3439489111
.word 2747836535
.word 1258565207
# store second to last block
.word 201879639
.word 33918119
# xts last block
.word 3439489111
.word 797838423
.word 2786307191
.word 2787191927
.word 2788240503
.word 2789289079
.word 2790337655
.word 2791386231
.word 2792434807
.word 2793483383
.word 2794531959
.word 2795580535
.word 2796661879
.word 797838423
# store last block ciphertext
addi a1, a1, -16
.word 33942567
ret
.size aes_xts_enc_128,.-aes_xts_enc_128
.p2align 3
aes_xts_enc_256:
# load input
.word 221182167
.word 33909767
li t0, 5
# We could simplify the initialization steps if we have `block<=1`.
blt t4, t0, 1f
# Note: We use `vgmul` for GF(2^128) multiplication. The `vgmul` uses
# different order of coefficients. We should use`vbrev8` to reverse the
# data when we use `vgmul`.
.word 3439489111
.word 1271144535
.word 221179991
.word 1577072727
# v16: [r-IV0, r-IV0, ...]
.word 2785257591
# Prepare GF(2^128) multiplier [1, x, x^2, x^3, ...] in v8.
slli t0, t4, 2
.word 218296407
# v2: [`1`, `1`, `1`, `1`, ...]
.word 1577103703
# v3: [`0`, `1`, `2`, `3`, ...]
.word 1376297431
.word 227733591
# v4: [`1`, 0, `1`, 0, `1`, 0, `1`, 0, ...]
.word 1243816535
# v6: [`0`, 0, `1`, 0, `2`, 0, `3`, 0, ...]
.word 1244865367
slli t0, t4, 1
.word 219344983
# v8: [1<<0=1, 0, 0, 0, 1<<1=x, 0, 0, 0, 1<<2=x^2, 0, 0, 0, ...]
.word 3594716247
# Compute [r-IV0*1, r-IV0*x, r-IV0*x^2, r-IV0*x^3, ...] in v16
.word 221179991
.word 1250174039
.word 2726865015
# Compute [IV0*1, IV0*x, IV0*x^2, IV0*x^3, ...] in v28.
# Reverse the bits order back.
.word 1258565207
# Prepare the x^n multiplier in v20. The `n` is the aes-xts block number
# in a LMUL=4 register group.
# n = ((VLEN*LMUL)/(32*4)) = ((VLEN*4)/(32*4))
# = (VLEN/32)
# We could use vsetvli with `e32, m1` to compute the `n` number.
.word 218133207
li t1, 1
sll t0, t1, t0
.word 3447812183
.word 1577070679
.word 3380670551
.word 1577238615
.word 3447812183
.word 1241784407
.word 221179991
.word 1577073239
.word 2785258103
j 2f
1:
.word 3439489111
.word 1271146583
2:
.word 3439489111
.word 34005127
addi a3, a3, 16
.word 34005255
addi a3, a3, 16
.word 34005383
addi a3, a3, 16
.word 34005511
addi a3, a3, 16
.word 34005639
addi a3, a3, 16
.word 34005767
addi a3, a3, 16
.word 34005895
addi a3, a3, 16
.word 34006023
addi a3, a3, 16
.word 34006151
addi a3, a3, 16
.word 34006279
addi a3, a3, 16
.word 34006407
addi a3, a3, 16
.word 34006535
addi a3, a3, 16
.word 34006663
addi a3, a3, 16
.word 34006791
addi a3, a3, 16
.word 34006919
.word 221182167
j 1f
.Lenc_blocks_256:
.word 221182167
# load plaintext into v24
.word 33909767
# update iv
.word 2739447927
# reverse the iv's bits order back
.word 1258565207
1:
.word 797838423
slli t0, a7, 2
sub t4, t4, a7
add a0, a0, t0
.word 2786307191
.word 2787191927
.word 2788240503
.word 2789289079
.word 2790337655
.word 2791386231
.word 2792434807
.word 2793483383
.word 2794531959
.word 2795580535
.word 2796629111
.word 2797677687
.word 2798726263
.word 2799774839
.word 2800856183
.word 797838423
# store ciphertext
.word 221147223
.word 33942567
add a1, a1, t0
sub t3, t3, a7
bnez t4, .Lenc_blocks_256
bnez a6, 1f
ret
1:
# slidedown second to last block
addi a7, a7, -4
.word 3441586263
# ciphertext
.word 1065929815
# multiplier
.word 1057540183
.word 3439489111
.word 1577848023
# load last block into v24
# note: We should load the last block before store the second to last block
# for in-place operation.
.word 134770775
.word 33885191
# setup `x` multiplier with byte-reversed order
# 0b00000010 => 0b01000000 (0x40)
li t0, 0x40
.word 3439489111
.word 1577074263
.word 3355504727
.word 1577242199
# compute IV for last block
.word 3439489111
.word 2747836535
.word 1258565207
# store second to last block
.word 201879639
.word 33918119
# xts last block
.word 3439489111
.word 797838423
.word 2786307191
.word 2787191927
.word 2788240503
.word 2789289079
.word 2790337655
.word 2791386231
.word 2792434807
.word 2793483383
.word 2794531959
.word 2795580535
.word 2796629111
.word 2797677687
.word 2798726263
.word 2799774839
.word 2800856183
.word 797838423
# store last block ciphertext
addi a1, a1, -16
.word 33942567
ret
.size aes_xts_enc_256,.-aes_xts_enc_256
.p2align 3
.globl rv64i_zvbb_zvkg_zvkned_aes_xts_decrypt
.type rv64i_zvbb_zvkg_zvkned_aes_xts_decrypt,@function
rv64i_zvbb_zvkg_zvkned_aes_xts_decrypt:
# Load number of rounds
lwu t0, 240(a4)
.word 3439489111
.word 34074119
.word 34041479
.word 2815667831
addi t0, t0, -1
addi a4, a4, 16
1:
.word 34041479
.word 2815503991
addi t0, t0, -1
addi a4, a4, 16
bnez t0, 1b
.word 34041479
.word 2815536759
# aes block size is 16
andi a6, a2, 15
beqz a6, 1f
sub a2, a2, a6
addi a2, a2, -16
1:
# We make the `LENGTH` become e32 length here.
srli t4, a2, 2
# Load number of rounds
lwu t0, 240(a3)
li t1, 14
li t2, 10
beq t0, t1, aes_xts_dec_256
beq t0, t2, aes_xts_dec_128
.size rv64i_zvbb_zvkg_zvkned_aes_xts_decrypt,.-rv64i_zvbb_zvkg_zvkned_aes_xts_decrypt
.p2align 3
aes_xts_dec_128:
# load input
.word 221182167
.word 33909767
li t0, 5
# We could simplify the initialization steps if we have `block<=1`.
blt t4, t0, 1f
# Note: We use `vgmul` for GF(2^128) multiplication. The `vgmul` uses
# different order of coefficients. We should use`vbrev8` to reverse the
# data when we use `vgmul`.
.word 3439489111
.word 1271144535
.word 221179991
.word 1577072727
# v16: [r-IV0, r-IV0, ...]
.word 2785257591
# Prepare GF(2^128) multiplier [1, x, x^2, x^3, ...] in v8.
slli t0, t4, 2
.word 218296407
# v2: [`1`, `1`, `1`, `1`, ...]
.word 1577103703
# v3: [`0`, `1`, `2`, `3`, ...]
.word 1376297431
.word 227733591
# v4: [`1`, 0, `1`, 0, `1`, 0, `1`, 0, ...]
.word 1243816535
# v6: [`0`, 0, `1`, 0, `2`, 0, `3`, 0, ...]
.word 1244865367
slli t0, t4, 1
.word 219344983
# v8: [1<<0=1, 0, 0, 0, 1<<1=x, 0, 0, 0, 1<<2=x^2, 0, 0, 0, ...]
.word 3594716247
# Compute [r-IV0*1, r-IV0*x, r-IV0*x^2, r-IV0*x^3, ...] in v16
.word 221179991
.word 1250174039
.word 2726865015
# Compute [IV0*1, IV0*x, IV0*x^2, IV0*x^3, ...] in v28.
# Reverse the bits order back.
.word 1258565207
# Prepare the x^n multiplier in v20. The `n` is the aes-xts block number
# in a LMUL=4 register group.
# n = ((VLEN*LMUL)/(32*4)) = ((VLEN*4)/(32*4))
# = (VLEN/32)
# We could use vsetvli with `e32, m1` to compute the `n` number.
.word 218133207
li t1, 1
sll t0, t1, t0
.word 3447812183
.word 1577070679
.word 3380670551
.word 1577238615
.word 3447812183
.word 1241784407
.word 221179991
.word 1577073239
.word 2785258103
j 2f
1:
.word 3439489111
.word 1271146583
2:
.word 3439489111
.word 34005127
addi a3, a3, 16
.word 34005255
addi a3, a3, 16
.word 34005383
addi a3, a3, 16
.word 34005511
addi a3, a3, 16
.word 34005639
addi a3, a3, 16
.word 34005767
addi a3, a3, 16
.word 34005895
addi a3, a3, 16
.word 34006023
addi a3, a3, 16
.word 34006151
addi a3, a3, 16
.word 34006279
addi a3, a3, 16
.word 34006407
beqz t4, 2f
.word 221182167
j 1f
.Ldec_blocks_128:
.word 221182167
# load ciphertext into v24
.word 33909767
# update iv
.word 2739447927
# reverse the iv's bits order back
.word 1258565207
1:
.word 797838423
slli t0, a7, 2
sub t4, t4, a7
add a0, a0, t0
.word 2796792951
.word 2795514999
.word 2794466423
.word 2793417847
.word 2792369271
.word 2791320695
.word 2790272119
.word 2789223543
.word 2788174967
.word 2787126391
.word 2786110583
.word 797838423
# store plaintext
.word 33942567
add a1, a1, t0
bnez t4, .Ldec_blocks_128
2:
bnez a6, 1f
ret
1:
# load second to last block's ciphertext
.word 3439489111
.word 33909767
addi a0, a0, 16
# setup `x` multiplier with byte-reversed order
# 0b00000010 => 0b01000000 (0x40)
li t0, 0x40
.word 3439489111
.word 1577073239
.word 3355504727
.word 1577241175
beqz a2, 1f
# slidedown third to last block
addi a7, a7, -4
.word 3441586263
# multiplier
.word 1057540183
# compute IV for last block
.word 3439489111
.word 2739447927
.word 1258565207
# compute IV for second to last block
.word 2739447927
.word 1258565335
j 2f
1:
# compute IV for second to last block
.word 3439489111
.word 2739447927
.word 1258565335
2:
## xts second to last block
.word 3439489111
.word 797871191
.word 2796792951
.word 2795514999
.word 2794466423
.word 2793417847
.word 2792369271
.word 2791320695
.word 2790272119
.word 2789223543
.word 2788174967
.word 2787126391
.word 2786110583
.word 797871191
.word 1577848023
# load last block ciphertext
.word 134770775
.word 33885191
# store second to last block plaintext
addi t0, a1, 16
.word 33721511
## xts last block
.word 3439489111
.word 797838423
.word 2796792951
.word 2795514999
.word 2794466423
.word 2793417847
.word 2792369271
.word 2791320695
.word 2790272119
.word 2789223543
.word 2788174967
.word 2787126391
.word 2786110583
.word 797838423
# store second to last block plaintext
.word 33942567
ret
.size aes_xts_dec_128,.-aes_xts_dec_128
.p2align 3
aes_xts_dec_256:
# load input
.word 221182167
.word 33909767
li t0, 5
# We could simplify the initialization steps if we have `block<=1`.
blt t4, t0, 1f
# Note: We use `vgmul` for GF(2^128) multiplication. The `vgmul` uses
# different order of coefficients. We should use`vbrev8` to reverse the
# data when we use `vgmul`.
.word 3439489111
.word 1271144535
.word 221179991
.word 1577072727
# v16: [r-IV0, r-IV0, ...]
.word 2785257591
# Prepare GF(2^128) multiplier [1, x, x^2, x^3, ...] in v8.
slli t0, t4, 2
.word 218296407
# v2: [`1`, `1`, `1`, `1`, ...]
.word 1577103703
# v3: [`0`, `1`, `2`, `3`, ...]
.word 1376297431
.word 227733591
# v4: [`1`, 0, `1`, 0, `1`, 0, `1`, 0, ...]
.word 1243816535
# v6: [`0`, 0, `1`, 0, `2`, 0, `3`, 0, ...]
.word 1244865367
slli t0, t4, 1
.word 219344983
# v8: [1<<0=1, 0, 0, 0, 1<<1=x, 0, 0, 0, 1<<2=x^2, 0, 0, 0, ...]
.word 3594716247
# Compute [r-IV0*1, r-IV0*x, r-IV0*x^2, r-IV0*x^3, ...] in v16
.word 221179991
.word 1250174039
.word 2726865015
# Compute [IV0*1, IV0*x, IV0*x^2, IV0*x^3, ...] in v28.
# Reverse the bits order back.
.word 1258565207
# Prepare the x^n multiplier in v20. The `n` is the aes-xts block number
# in a LMUL=4 register group.
# n = ((VLEN*LMUL)/(32*4)) = ((VLEN*4)/(32*4))
# = (VLEN/32)
# We could use vsetvli with `e32, m1` to compute the `n` number.
.word 218133207
li t1, 1
sll t0, t1, t0
.word 3447812183
.word 1577070679
.word 3380670551
.word 1577238615
.word 3447812183
.word 1241784407
.word 221179991
.word 1577073239
.word 2785258103
j 2f
1:
.word 3439489111
.word 1271146583
2:
.word 3439489111
.word 34005127
addi a3, a3, 16
.word 34005255
addi a3, a3, 16
.word 34005383
addi a3, a3, 16
.word 34005511
addi a3, a3, 16
.word 34005639
addi a3, a3, 16
.word 34005767
addi a3, a3, 16
.word 34005895
addi a3, a3, 16
.word 34006023
addi a3, a3, 16
.word 34006151
addi a3, a3, 16
.word 34006279
addi a3, a3, 16
.word 34006407
addi a3, a3, 16
.word 34006535
addi a3, a3, 16
.word 34006663
addi a3, a3, 16
.word 34006791
addi a3, a3, 16
.word 34006919
beqz t4, 2f
.word 221182167
j 1f
.Ldec_blocks_256:
.word 221182167
# load ciphertext into v24
.word 33909767
# update iv
.word 2739447927
# reverse the iv's bits order back
.word 1258565207
1:
.word 797838423
slli t0, a7, 2
sub t4, t4, a7
add a0, a0, t0
.word 2800987255
.word 2799709303
.word 2798660727
.word 2797612151
.word 2796563575
.word 2795514999
.word 2794466423
.word 2793417847
.word 2792369271
.word 2791320695
.word 2790272119
.word 2789223543
.word 2788174967
.word 2787126391
.word 2786110583
.word 797838423
# store plaintext
.word 33942567
add a1, a1, t0
bnez t4, .Ldec_blocks_256
2:
bnez a6, 1f
ret
1:
# load second to last block's ciphertext
.word 3439489111
.word 33909767
addi a0, a0, 16
# setup `x` multiplier with byte-reversed order
# 0b00000010 => 0b01000000 (0x40)
li t0, 0x40
.word 3439489111
.word 1577073239
.word 3355504727
.word 1577241175
beqz a2, 1f
# slidedown third to last block
addi a7, a7, -4
.word 3441586263
# multiplier
.word 1057540183
# compute IV for last block
.word 3439489111
.word 2739447927
.word 1258565207
# compute IV for second to last block
.word 2739447927
.word 1258565335
j 2f
1:
# compute IV for second to last block
.word 3439489111
.word 2739447927
.word 1258565335
2:
## xts second to last block
.word 3439489111
.word 797871191
.word 2800987255
.word 2799709303
.word 2798660727
.word 2797612151
.word 2796563575
.word 2795514999
.word 2794466423
.word 2793417847
.word 2792369271
.word 2791320695
.word 2790272119
.word 2789223543
.word 2788174967
.word 2787126391
.word 2786110583
.word 797871191
.word 1577848023
# load last block ciphertext
.word 134770775
.word 33885191
# store second to last block plaintext
addi t0, a1, 16
.word 33721511
## xts last block
.word 3439489111
.word 797838423
.word 2800987255
.word 2799709303
.word 2798660727
.word 2797612151
.word 2796563575
.word 2795514999
.word 2794466423
.word 2793417847
.word 2792369271
.word 2791320695
.word 2790272119
.word 2789223543
.word 2788174967
.word 2787126391
.word 2786110583
.word 797838423
# store second to last block plaintext
.word 33942567
ret
.size aes_xts_dec_256,.-aes_xts_dec_256
@@ -0,0 +1,326 @@
.text
.p2align 3
.globl rv64i_zvkb_zvkned_ctr32_encrypt_blocks
.type rv64i_zvkb_zvkned_ctr32_encrypt_blocks,@function
rv64i_zvkb_zvkned_ctr32_encrypt_blocks:
beqz a2, 1f
# Load number of rounds
lwu t0, 240(a3)
li t1, 14
li t2, 12
li t3, 10
slli t5, a2, 2
beq t0, t1, ctr32_encrypt_blocks_256
beq t0, t2, ctr32_encrypt_blocks_192
beq t0, t3, ctr32_encrypt_blocks_128
1:
ret
.size rv64i_zvkb_zvkned_ctr32_encrypt_blocks,.-rv64i_zvkb_zvkned_ctr32_encrypt_blocks
.p2align 3
ctr32_encrypt_blocks_128:
# Load all 11 round keys to v1-v11 registers.
.word 3439489111
.word 34005127
addi a3, a3, 16
.word 34005255
addi a3, a3, 16
.word 34005383
addi a3, a3, 16
.word 34005511
addi a3, a3, 16
.word 34005639
addi a3, a3, 16
.word 34005767
addi a3, a3, 16
.word 34005895
addi a3, a3, 16
.word 34006023
addi a3, a3, 16
.word 34006151
addi a3, a3, 16
.word 34006279
addi a3, a3, 16
.word 34006407
# Setup mask into v0
# The mask pattern for 4*N-th elements
# mask v0: [000100010001....]
# Note:
# We could setup the mask just for the maximum element length instead of
# the VLMAX.
li t0, 0b10001000
.word 201356247
.word 1577238615
# Load IV.
# v31:[IV0, IV1, IV2, big-endian count]
.word 3439489111
.word 34041735
# Convert the big-endian counter into little-endian.
.word 3305271383
.word 1240772567
# Splat the IV to v16
.word 221212759
.word 1577072727
.word 2817763447
# Prepare the ctr pattern into v20
# v20: [x, x, x, 0, x, x, x, 1, x, x, x, 2, ...]
.word 1342712407
# v16:[IV0, IV1, IV2, count+0, IV0, IV1, IV2, count+1, ...]
.word 86998743
.word 17434711
##### AES body
j 2f
1:
.word 86998743
# Increase ctr in v16.
.word 17811543
2:
# Load plaintext into v20
.word 33909255
slli t0, t4, 2
srli t6, t4, 2
sub t5, t5, t4
add a0, a0, t0
# Prepare the AES ctr input into v24.
# The ctr data uses big-endian form.
.word 1577585751
.word 1233431639
.word 2786307191
.word 2787191927
.word 2788240503
.word 2789289079
.word 2790337655
.word 2791386231
.word 2792434807
.word 2793483383
.word 2794531959
.word 2795580535
.word 2796661879
# ciphertext
.word 797576279
# Store the ciphertext.
.word 33942567
add a1, a1, t0
bnez t5, 1b
ret
.size ctr32_encrypt_blocks_128,.-ctr32_encrypt_blocks_128
.p2align 3
ctr32_encrypt_blocks_192:
# Load all 13 round keys to v1-v13 registers.
.word 3439489111
.word 34005127
addi a3, a3, 16
.word 34005255
addi a3, a3, 16
.word 34005383
addi a3, a3, 16
.word 34005511
addi a3, a3, 16
.word 34005639
addi a3, a3, 16
.word 34005767
addi a3, a3, 16
.word 34005895
addi a3, a3, 16
.word 34006023
addi a3, a3, 16
.word 34006151
addi a3, a3, 16
.word 34006279
addi a3, a3, 16
.word 34006407
addi a3, a3, 16
.word 34006535
addi a3, a3, 16
.word 34006663
# Setup mask into v0
# The mask pattern for 4*N-th elements
# mask v0: [000100010001....]
# Note:
# We could setup the mask just for the maximum element length instead of
# the VLMAX.
li t0, 0b10001000
.word 201356247
.word 1577238615
# Load IV.
# v31:[IV0, IV1, IV2, big-endian count]
.word 3439489111
.word 34041735
# Convert the big-endian counter into little-endian.
.word 3305271383
.word 1240772567
# Splat the IV to v16
.word 221212759
.word 1577072727
.word 2817763447
# Prepare the ctr pattern into v20
# v20: [x, x, x, 0, x, x, x, 1, x, x, x, 2, ...]
.word 1342712407
# v16:[IV0, IV1, IV2, count+0, IV0, IV1, IV2, count+1, ...]
.word 86998743
.word 17434711
##### AES body
j 2f
1:
.word 86998743
# Increase ctr in v16.
.word 17811543
2:
# Load plaintext into v20
.word 33909255
slli t0, t4, 2
srli t6, t4, 2
sub t5, t5, t4
add a0, a0, t0
# Prepare the AES ctr input into v24.
# The ctr data uses big-endian form.
.word 1577585751
.word 1233431639
.word 2786307191
.word 2787191927
.word 2788240503
.word 2789289079
.word 2790337655
.word 2791386231
.word 2792434807
.word 2793483383
.word 2794531959
.word 2795580535
.word 2796629111
.word 2797677687
.word 2798759031
# ciphertext
.word 797576279
# Store the ciphertext.
.word 33942567
add a1, a1, t0
bnez t5, 1b
ret
.size ctr32_encrypt_blocks_192,.-ctr32_encrypt_blocks_192
.p2align 3
ctr32_encrypt_blocks_256:
# Load all 15 round keys to v1-v15 registers.
.word 3439489111
.word 34005127
addi a3, a3, 16
.word 34005255
addi a3, a3, 16
.word 34005383
addi a3, a3, 16
.word 34005511
addi a3, a3, 16
.word 34005639
addi a3, a3, 16
.word 34005767
addi a3, a3, 16
.word 34005895
addi a3, a3, 16
.word 34006023
addi a3, a3, 16
.word 34006151
addi a3, a3, 16
.word 34006279
addi a3, a3, 16
.word 34006407
addi a3, a3, 16
.word 34006535
addi a3, a3, 16
.word 34006663
addi a3, a3, 16
.word 34006791
addi a3, a3, 16
.word 34006919
# Setup mask into v0
# The mask pattern for 4*N-th elements
# mask v0: [000100010001....]
# Note:
# We could setup the mask just for the maximum element length instead of
# the VLMAX.
li t0, 0b10001000
.word 201356247
.word 1577238615
# Load IV.
# v31:[IV0, IV1, IV2, big-endian count]
.word 3439489111
.word 34041735
# Convert the big-endian counter into little-endian.
.word 3305271383
.word 1240772567
# Splat the IV to v16
.word 221212759
.word 1577072727
.word 2817763447
# Prepare the ctr pattern into v20
# v20: [x, x, x, 0, x, x, x, 1, x, x, x, 2, ...]
.word 1342712407
# v16:[IV0, IV1, IV2, count+0, IV0, IV1, IV2, count+1, ...]
.word 86998743
.word 17434711
##### AES body
j 2f
1:
.word 86998743
# Increase ctr in v16.
.word 17811543
2:
# Load plaintext into v20
.word 33909255
slli t0, t4, 2
srli t6, t4, 2
sub t5, t5, t4
add a0, a0, t0
# Prepare the AES ctr input into v24.
# The ctr data uses big-endian form.
.word 1577585751
.word 1233431639
.word 2786307191
.word 2787191927
.word 2788240503
.word 2789289079
.word 2790337655
.word 2791386231
.word 2792434807
.word 2793483383
.word 2794531959
.word 2795580535
.word 2796629111
.word 2797677687
.word 2798726263
.word 2799774839
.word 2800856183
# ciphertext
.word 797576279
# Store the ciphertext.
.word 33942567
add a1, a1, t0
bnez t5, 1b
ret
.size ctr32_encrypt_blocks_256,.-ctr32_encrypt_blocks_256
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,37 @@
/*
* WARNING: do not edit!
* Generated by util/mkbuildinf.pl
*
* Copyright 2014-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
*/
#define PLATFORM "platform: linux64-riscv64"
#define DATE "built on: Tue Jun 30 04:16:04 2026 UTC"
/*
* Generate compiler_flags as an array of individual characters. This is a
* workaround for the situation where CFLAGS gets too long for a C90 string
* literal
*/
static const char compiler_flags[] = {
'c','o','m','p','i','l','e','r',':',' ','.','.','/','c','o','n',
'f','i','g','/','f','a','k','e','_','g','c','c','.','p','l',' ',
'-','f','P','I','C',' ','-','p','t','h','r','e','a','d',' ','-',
'W','a',',','-','-','n','o','e','x','e','c','s','t','a','c','k',
' ','-','W','a','l','l',' ','-','O','3',' ','-','D','O','P','E',
'N','S','S','L','_','U','S','E','_','N','O','D','E','L','E','T',
'E',' ','-','D','O','P','E','N','S','S','L','_','P','I','C',' ',
'-','D','O','P','E','N','S','S','L','_','B','U','I','L','D','I',
'N','G','_','O','P','E','N','S','S','L',' ','-','D','B','R','O',
'T','L','I',' ','-','D','Z','L','I','B',' ','-','D','Z','S','T',
'D',' ','-','D','N','D','E','B','U','G',' ','-','I','.','.','/',
'.','.','/','b','r','o','t','l','i','/','c','/','i','n','c','l',
'u','d','e',' ','-','I','.','.','/','.','.','/','z','l','i','b',
' ','-','I','.','.','/','.','.','/','z','s','t','d','/','l','i',
'b','\0'
};
@@ -0,0 +1,461 @@
.text
.p2align 3
.globl ChaCha20_ctr32_v_zbb_zvkb
.type ChaCha20_ctr32_v_zbb_zvkb,@function
ChaCha20_ctr32_v_zbb_zvkb:
addi sp, sp, -96
sd s0, 0(sp)
sd s1, 8(sp)
sd s2, 16(sp)
sd s3, 24(sp)
sd s4, 32(sp)
sd s5, 40(sp)
sd s6, 48(sp)
sd s7, 56(sp)
sd s8, 64(sp)
sd s9, 72(sp)
sd s10, 80(sp)
sd s11, 88(sp)
addi sp, sp, -64
lw t2, 0(a4)
.Lblock_loop:
# We will use the scalar ALU for 1 chacha block.
srli t3, a2, 6
.word 219050839
slli t4, t1, 6
bltu t4, a2, 1f
# Since there is no more chacha block existed, we need to split 1 block
# from vector ALU.
addi t4, t1, -1
.word 219083607
1:
#### chacha block data
# init chacha const states into v0~v3
# "expa" little endian
li a5, 0x61707865
.word 1577566295
# "nd 3" little endian
li a6, 0x3320646e
.word 1577599191
# "2-by" little endian
li a7, 0x79622d32
.word 1577632087
# "te k" little endian
li s0, 0x6b206574
lw s1, 0(a3)
.word 1577337303
# init chacha key states into v4~v11
lw s2, 4(a3)
.word 1577370199
lw s3, 8(a3)
.word 1577665239
lw s4, 12(a3)
.word 1577698135
lw s5, 16(a3)
.word 1577731031
lw s6, 20(a3)
.word 1577763927
lw s7, 24(a3)
.word 1577796823
lw s8, 28(a3)
.word 1577829719
.word 1577862615
# init chacha key states into v12~v13
lw s10, 4(a4)
.word 1376298583
lw s11, 8(a4)
.word 46384727
lw t0, 12(a4)
.word 1577928407
add s9, t2, t1
# init chacha nonce states into v14~v15
.word 1577961303
.word 1577240535
li t3, 64
# load the top-half of input data into v16~v23
.word 3955615751
# till now in block_loop, we used:
# - v0~v15 for chacha states.
# - v16~v23 for top-half of input data.
# - v24~v31 haven't been used yet.
# 20 round groups
li t3, 10
.Lround_loop:
# we can use v24~v31 as temporary registers in round_loop.
addi t3, t3, -1
# a += b; d ^= a; d <<<= 16;
.word 33685591
add a5, a5, s1
.word 34767063
add a6, a6, s2
.word 35848535
add a7, a7, s3
.word 36930007
add s0, s0, s4
.word 784336471
xor s9, s9, a5
.word 785417943
xor s10, s10, a6
.word 786499415
xor s11, s11, a7
.word 787580887
xor t0, t0, s0
.word 1388852823
.word 1628232859
.word 1389901527
.word 1628265755
.word 1390950231
.word 1628298651
.word 1391998935
.word 1627574939
# c += d; b ^= c; b <<<= 12;
.word 42337367
add s5, s5, s9
.word 43418839
add s6, s6, s10
.word 44500311
add s7, s7, s11
.word 45581783
add s8, s8, t0
.word 776208983
xor s1, s1, s5
.word 777290455
xor s2, s2, s6
.word 778371927
xor s3, s3, s7
.word 779453399
xor s4, s4, s8
.word 1380594263
.word 1631900827
.word 1381642967
.word 1632196891
.word 1382691671
.word 1632229787
.word 1383740375
.word 1632262683
# a += b; d ^= a; d <<<= 8;
.word 33685591
add a5, a5, s1
.word 34767063
add a6, a6, s2
.word 35848535
add a7, a7, s3
.word 36930007
add s0, s0, s4
.word 784336471
xor s9, s9, a5
.word 785417943
xor s10, s10, a6
.word 786499415
xor s11, s11, a7
.word 787580887
xor t0, t0, s0
.word 1389114967
.word 1636621467
.word 1390163671
.word 1636654363
.word 1391212375
.word 1636687259
.word 1392261079
.word 1635963547
# c += d; b ^= c; b <<<= 7;
.word 42337367
add s5, s5, s9
.word 43418839
add s6, s6, s10
.word 44500311
add s7, s7, s11
.word 45581783
add s8, s8, t0
.word 776208983
xor s1, s1, s5
.word 777290455
xor s2, s2, s6
.word 778371927
xor s3, s3, s7
.word 779453399
xor s4, s4, s8
.word 1380758103
.word 1637143707
.word 1381806807
.word 1637439771
.word 1382855511
.word 1637472667
.word 1383904215
.word 1637505563
# a += b; d ^= a; d <<<= 16;
.word 36831703
add s0, s0, s1
.word 33718359
add a5, a5, s2
.word 34799831
add a6, a6, s3
.word 35881303
add a7, a7, s4
.word 786532183
xor s11, s11, s0
.word 787482583
xor t0, t0, a5
.word 784369239
xor s9, s9, a6
.word 785450711
xor s10, s10, a7
.word 1390950231
.word 1628298651
.word 1391998935
.word 1627574939
.word 1388852823
.word 1628232859
.word 1389901527
.word 1628265755
# c += d; b ^= c; b <<<= 12;
.word 43451607
add s6, s6, s11
.word 44533079
add s7, s7, t0
.word 45483479
add s8, s8, s9
.word 42370135
add s5, s5, s10
.word 776241751
xor s1, s1, s6
.word 777323223
xor s2, s2, s7
.word 778404695
xor s3, s3, s8
.word 779355095
xor s4, s4, s5
.word 1380594263
.word 1631900827
.word 1381642967
.word 1632196891
.word 1382691671
.word 1632229787
.word 1383740375
.word 1632262683
# a += b; d ^= a; d <<<= 8;
.word 36831703
add s0, s0, s1
.word 33718359
add a5, a5, s2
.word 34799831
add a6, a6, s3
.word 35881303
add a7, a7, s4
.word 786532183
xor s11, s11, s0
.word 787482583
xor t0, t0, a5
.word 784369239
xor s9, s9, a6
.word 785450711
xor s10, s10, a7
.word 1391212375
.word 1636687259
.word 1392261079
.word 1635963547
.word 1389114967
.word 1636621467
.word 1390163671
.word 1636654363
# c += d; b ^= c; b <<<= 7;
.word 43451607
add s6, s6, s11
.word 44533079
add s7, s7, t0
.word 45483479
add s8, s8, s9
.word 42370135
add s5, s5, s10
.word 776241751
xor s1, s1, s6
.word 777323223
xor s2, s2, s7
.word 778404695
xor s3, s3, s8
.word 779355095
xor s4, s4, s5
.word 1380758103
.word 1637143707
.word 1381806807
.word 1637439771
.word 1382855511
.word 1637472667
.word 1383904215
.word 1637505563
bnez t3, .Lround_loop
li t3, 64
# load the bottom-half of input data into v24~v31
addi t4, a1, 32
.word 3956206599
# now, there are no free vector registers until the round_loop exits.
# add chacha top-half initial block states
# "expa" little endian
li t3, 0x61707865
.word 34488407
add a5, a5, t3
# "nd 3" little endian
li t4, 0x3320646e
.word 35569879
add a6, a6, t4
lw t3, 0(a3)
# "2-by" little endian
li t5, 0x79622d32
.word 36651351
add a7, a7, t5
lw t4, 4(a3)
# "te k" little endian
li t6, 0x6b206574
.word 37732823
add s0, s0, t6
lw t5, 8(a3)
.word 38683223
add s1, s1, t3
lw t6, 12(a3)
.word 39764695
add s2, s2, t4
.word 40846167
add s3, s3, t5
.word 41927639
add s4, s4, t6
# xor with the top-half input
.word 788531287
sw a5, 0(sp)
sw a6, 4(sp)
.word 789612759
sw a7, 8(sp)
sw s0, 12(sp)
.word 790694231
sw s1, 16(sp)
sw s2, 20(sp)
.word 791775703
sw s3, 24(sp)
sw s4, 28(sp)
.word 792857175
lw t3, 16(a3)
.word 793938647
lw t4, 20(a3)
.word 795020119
lw t5, 24(a3)
.word 796101591
# save the top-half of output from v16~v23
li t6, 64
.word 3958728743
# add chacha bottom-half initial block states
.word 42878039
add s5, s5, t3
lw t6, 28(a3)
.word 43959511
add s6, s6, t4
lw t3, 4(a4)
.word 45040983
add s7, s7, t5
lw t4, 8(a4)
.word 46122455
add s8, s8, t6
lw t5, 12(a4)
.word 1376297047
add s9, s9, t2
.word 46384727
add s9, s9, t1
.word 48121559
add s10, s10, t3
.word 49203031
add s11, s11, t4
.word 50284503
add t0, t0, t5
.word 46138967
# xor with the bottom-half input
.word 797183063
sw s5, 32(sp)
.word 798264535
sw s6, 36(sp)
.word 799346007
sw s7, 40(sp)
.word 800427479
sw s8, 44(sp)
.word 802590423
sw s9, 48(sp)
.word 801508951
sw s10, 52(sp)
.word 803671895
sw s11, 56(sp)
.word 804753367
sw t0, 60(sp)
# save the bottom-half of output from v24~v31
li t3, 64
addi t4, a0, 32
.word 3956206631
# the computed vector parts: `64 * VL`
slli t3, t1, 6
add a1, a1, t3
add a0, a0, t3
sub a2, a2, t3
add t2, t2, t1
# process the scalar data block
addi t2, t2, 1
li t3, 64
.word 197549747
sub a2, a2, t4
mv t5, sp
.Lscalar_data_loop:
.word 205452119
# from this on, vector registers are grouped with lmul = 8
.word 33915911
.word 34539527
.word 780665943
.word 33883175
add a1, a1, t1
add a0, a0, t1
add t5, t5, t1
sub t4, t4, t1
bnez t4, .Lscalar_data_loop
bnez a2, .Lblock_loop
addi sp, sp, 64
ld s0, 0(sp)
ld s1, 8(sp)
ld s2, 16(sp)
ld s3, 24(sp)
ld s4, 32(sp)
ld s5, 40(sp)
ld s6, 48(sp)
ld s7, 56(sp)
ld s8, 64(sp)
ld s9, 72(sp)
ld s10, 80(sp)
ld s11, 88(sp)
addi sp, sp, 96
ret
.size ChaCha20_ctr32_v_zbb_zvkb,.-ChaCha20_ctr32_v_zbb_zvkb
@@ -0,0 +1,525 @@
.text
.p2align 3
.globl ChaCha20_ctr32_v_zbb
.type ChaCha20_ctr32_v_zbb,@function
ChaCha20_ctr32_v_zbb:
addi sp, sp, -96
sd s0, 0(sp)
sd s1, 8(sp)
sd s2, 16(sp)
sd s3, 24(sp)
sd s4, 32(sp)
sd s5, 40(sp)
sd s6, 48(sp)
sd s7, 56(sp)
sd s8, 64(sp)
sd s9, 72(sp)
sd s10, 80(sp)
sd s11, 88(sp)
addi sp, sp, -64
lw t2, 0(a4)
.Lblock_loop:
# We will use the scalar ALU for 1 chacha block.
srli t3, a2, 6
.word 219050839
slli t4, t1, 6
bltu t4, a2, 1f
# Since there is no more chacha block existed, we need to split 1 block
# from vector ALU.
addi t4, t1, -1
.word 219083607
1:
#### chacha block data
# init chacha const states into v0~v3
# "expa" little endian
li a5, 0x61707865
.word 1577566295
# "nd 3" little endian
li a6, 0x3320646e
.word 1577599191
# "2-by" little endian
li a7, 0x79622d32
.word 1577632087
# "te k" little endian
li s0, 0x6b206574
lw s1, 0(a3)
.word 1577337303
# init chacha key states into v4~v11
lw s2, 4(a3)
.word 1577370199
lw s3, 8(a3)
.word 1577665239
lw s4, 12(a3)
.word 1577698135
lw s5, 16(a3)
.word 1577731031
lw s6, 20(a3)
.word 1577763927
lw s7, 24(a3)
.word 1577796823
lw s8, 28(a3)
.word 1577829719
.word 1577862615
# init chacha key states into v12~v13
lw s10, 4(a4)
.word 1376298583
lw s11, 8(a4)
.word 46384727
lw t0, 12(a4)
.word 1577928407
add s9, t2, t1
# init chacha nonce states into v14~v15
.word 1577961303
.word 1577240535
li t3, 64
# load the top-half of input data into v16~v23
.word 3955615751
# till now in block_loop, we used:
# - v0~v15 for chacha states.
# - v16~v23 for top-half of input data.
# - v24~v31 haven't been used yet.
# 20 round groups
li t3, 10
.Lround_loop:
# we can use v24~v31 as temporary registers in round_loop.
addi t3, t3, -1
# a += b; d ^= a; d <<<= 16;
.word 33685591
add a5, a5, s1
.word 34767063
add a6, a6, s2
.word 35848535
add a7, a7, s3
.word 36930007
add s0, s0, s4
.word 784336471
xor s9, s9, a5
.word 785417943
xor s10, s10, a6
.word 786499415
xor s11, s11, a7
.word 787580887
xor t0, t0, s0
.word 2529705047
.word 2530753751
.word 2531802455
.word 2532851159
.word 2731030103
.word 2732078807
.word 2733127511
.word 2734176215
.word 718014039
.word 1628232859
.word 719095511
.word 1628265755
.word 720176983
.word 1628298651
.word 721258455
.word 1627574939
# c += d; b ^= c; b <<<= 12;
.word 42337367
add s5, s5, s9
.word 43418839
add s6, s6, s10
.word 44500311
add s7, s7, s11
.word 45581783
add s8, s8, t0
.word 776208983
xor s1, s1, s5
.word 777290455
xor s2, s2, s6
.word 778371927
xor s3, s3, s7
.word 779453399
xor s4, s4, s8
.word 2521185367
.word 2522234071
.word 2523282775
.word 2524331479
.word 2722771543
.word 2723820247
.word 2724868951
.word 2725917655
.word 709624407
.word 1631900827
.word 710705879
.word 1632196891
.word 711787351
.word 1632229787
.word 712868823
.word 1632262683
# a += b; d ^= a; d <<<= 8;
.word 33685591
add a5, a5, s1
.word 34767063
add a6, a6, s2
.word 35848535
add a7, a7, s3
.word 36930007
add s0, s0, s4
.word 784336471
xor s9, s9, a5
.word 785417943
xor s10, s10, a6
.word 786499415
xor s11, s11, a7
.word 787580887
xor t0, t0, s0
.word 2529442903
.word 2530491607
.word 2531540311
.word 2532589015
.word 2731292247
.word 2732340951
.word 2733389655
.word 2734438359
.word 718014039
.word 1636621467
.word 719095511
.word 1636654363
.word 720176983
.word 1636687259
.word 721258455
.word 1635963547
# c += d; b ^= c; b <<<= 7;
.word 42337367
add s5, s5, s9
.word 43418839
add s6, s6, s10
.word 44500311
add s7, s7, s11
.word 45581783
add s8, s8, t0
.word 776208983
xor s1, s1, s5
.word 777290455
xor s2, s2, s6
.word 778371927
xor s3, s3, s7
.word 779453399
xor s4, s4, s8
.word 2521021527
.word 2522070231
.word 2523118935
.word 2524167639
.word 2722935383
.word 2723984087
.word 2725032791
.word 2726081495
.word 709624407
.word 1637143707
.word 710705879
.word 1637439771
.word 711787351
.word 1637472667
.word 712868823
.word 1637505563
# a += b; d ^= a; d <<<= 16;
.word 36831703
add s0, s0, s1
.word 33718359
add a5, a5, s2
.word 34799831
add a6, a6, s3
.word 35881303
add a7, a7, s4
.word 786532183
xor s11, s11, s0
.word 787482583
xor t0, t0, a5
.word 784369239
xor s9, s9, a6
.word 785450711
xor s10, s10, a7
.word 2531802199
.word 2532850903
.word 2529705303
.word 2530754007
.word 2733127511
.word 2734176215
.word 2731030103
.word 2732078807
.word 720111447
.word 1628298651
.word 721192919
.word 1627574939
.word 718079575
.word 1628232859
.word 719161047
.word 1628265755
# c += d; b ^= c; b <<<= 12;
.word 43451607
add s6, s6, s11
.word 44533079
add s7, s7, t0
.word 45483479
add s8, s8, s9
.word 42370135
add s5, s5, s10
.word 776241751
xor s1, s1, s6
.word 777323223
xor s2, s2, s7
.word 778404695
xor s3, s3, s8
.word 779355095
xor s4, s4, s5
.word 2521185367
.word 2522234071
.word 2523282775
.word 2524331479
.word 2722771543
.word 2723820247
.word 2724868951
.word 2725917655
.word 709624407
.word 1631900827
.word 710705879
.word 1632196891
.word 711787351
.word 1632229787
.word 712868823
.word 1632262683
# a += b; d ^= a; d <<<= 8;
.word 36831703
add s0, s0, s1
.word 33718359
add a5, a5, s2
.word 34799831
add a6, a6, s3
.word 35881303
add a7, a7, s4
.word 786532183
xor s11, s11, s0
.word 787482583
xor t0, t0, a5
.word 784369239
xor s9, s9, a6
.word 785450711
xor s10, s10, a7
.word 2531540055
.word 2532588759
.word 2529443159
.word 2530491863
.word 2733389655
.word 2734438359
.word 2731292247
.word 2732340951
.word 720111447
.word 1636687259
.word 721192919
.word 1635963547
.word 718079575
.word 1636621467
.word 719161047
.word 1636654363
# c += d; b ^= c; b <<<= 7;
.word 43451607
add s6, s6, s11
.word 44533079
add s7, s7, t0
.word 45483479
add s8, s8, s9
.word 42370135
add s5, s5, s10
.word 776241751
xor s1, s1, s6
.word 777323223
xor s2, s2, s7
.word 778404695
xor s3, s3, s8
.word 779355095
xor s4, s4, s5
.word 2521021527
.word 2522070231
.word 2523118935
.word 2524167639
.word 2722935383
.word 2723984087
.word 2725032791
.word 2726081495
.word 709624407
.word 1637143707
.word 710705879
.word 1637439771
.word 711787351
.word 1637472667
.word 712868823
.word 1637505563
bnez t3, .Lround_loop
li t3, 64
# load the bottom-half of input data into v24~v31
addi t4, a1, 32
.word 3956206599
# now, there are no free vector registers until the round_loop exits.
# add chacha top-half initial block states
# "expa" little endian
li t3, 0x61707865
.word 34488407
add a5, a5, t3
# "nd 3" little endian
li t4, 0x3320646e
.word 35569879
add a6, a6, t4
lw t3, 0(a3)
# "2-by" little endian
li t5, 0x79622d32
.word 36651351
add a7, a7, t5
lw t4, 4(a3)
# "te k" little endian
li t6, 0x6b206574
.word 37732823
add s0, s0, t6
lw t5, 8(a3)
.word 38683223
add s1, s1, t3
lw t6, 12(a3)
.word 39764695
add s2, s2, t4
.word 40846167
add s3, s3, t5
.word 41927639
add s4, s4, t6
# xor with the top-half input
.word 788531287
sw a5, 0(sp)
sw a6, 4(sp)
.word 789612759
sw a7, 8(sp)
sw s0, 12(sp)
.word 790694231
sw s1, 16(sp)
sw s2, 20(sp)
.word 791775703
sw s3, 24(sp)
sw s4, 28(sp)
.word 792857175
lw t3, 16(a3)
.word 793938647
lw t4, 20(a3)
.word 795020119
lw t5, 24(a3)
.word 796101591
# save the top-half of output from v16~v23
li t6, 64
.word 3958728743
# add chacha bottom-half initial block states
.word 42878039
add s5, s5, t3
lw t6, 28(a3)
.word 43959511
add s6, s6, t4
lw t3, 4(a4)
.word 45040983
add s7, s7, t5
lw t4, 8(a4)
.word 46122455
add s8, s8, t6
lw t5, 12(a4)
.word 1376297047
add s9, s9, t2
.word 46384727
add s9, s9, t1
.word 48121559
add s10, s10, t3
.word 49203031
add s11, s11, t4
.word 50284503
add t0, t0, t5
.word 46138967
# xor with the bottom-half input
.word 797183063
sw s5, 32(sp)
.word 798264535
sw s6, 36(sp)
.word 799346007
sw s7, 40(sp)
.word 800427479
sw s8, 44(sp)
.word 802590423
sw s9, 48(sp)
.word 801508951
sw s10, 52(sp)
.word 803671895
sw s11, 56(sp)
.word 804753367
sw t0, 60(sp)
# save the bottom-half of output from v24~v31
li t3, 64
addi t4, a0, 32
.word 3956206631
# the computed vector parts: `64 * VL`
slli t3, t1, 6
add a1, a1, t3
add a0, a0, t3
sub a2, a2, t3
add t2, t2, t1
# process the scalar data block
addi t2, t2, 1
li t3, 64
.word 197549747
sub a2, a2, t4
mv t5, sp
.Lscalar_data_loop:
.word 205452119
# from this on, vector registers are grouped with lmul = 8
.word 33915911
.word 34539527
.word 780665943
.word 33883175
add a1, a1, t1
add a0, a0, t1
add t5, t5, t1
sub t4, t4, t1
bnez t4, .Lscalar_data_loop
bnez a2, .Lblock_loop
addi sp, sp, 64
ld s0, 0(sp)
ld s1, 8(sp)
ld s2, 16(sp)
ld s3, 24(sp)
ld s4, 32(sp)
ld s5, 40(sp)
ld s6, 48(sp)
ld s7, 56(sp)
ld s8, 64(sp)
ld s9, 72(sp)
ld s10, 80(sp)
ld s11, 88(sp)
addi sp, sp, 96
ret
.size ChaCha20_ctr32_v_zbb,.-ChaCha20_ctr32_v_zbb
@@ -0,0 +1,268 @@
.text
.p2align 3
.globl gcm_init_rv64i_zvkb_zvbc
.type gcm_init_rv64i_zvkb_zvbc,@function
gcm_init_rv64i_zvkb_zvbc:
# Load/store data in reverse order.
# This is needed as a part of endianness swap.
add a1, a1, 8
li t0, -8
li t1, 63
la t2, Lpolymod
.word 0xc1817057 # vsetivli x0, 2, e64, m1, tu, mu
.word 173404295 # vlse64.v v1, (a1), t0
.word 33812743 # vle64.v v2, (t2)
# Shift one left and get the carry bits.
.word 2719171031 # vsrl.vx v3, v1, t1
.word 2517676247 # vsll.vi v1, v1, 1
# Use the fact that the polynomial degree is no more than 128,
# i.e. only the LSB of the upper half could be set.
# Thanks to this we don't need to do the full reduction here.
# Instead simply subtract the reduction polynomial.
# This idea was taken from x86 ghash implementation in OpenSSL.
.word 976269911 # vslideup.vi v4, v3, 1
.word 1043378647 # vslidedown.vi v3, v3, 1
.word 1577136215 # vmv.v.i v0, 2
.word 672268503 # vor.vv v1, v1, v4, v0.t
# Need to set the mask to 3, if the carry bit is set.
.word 1577156695 # vmv.v.v v0, v3
.word 1577071063 # vmv.v.i v3, 0
.word 1546760663 # vmerge.vim v3, v3, 3, v0
.word 1577156695 # vmv.v.v v0, v3
.word 739311831 # vxor.vv v1, v1, v2, v0.t
.word 33910951 # vse64.v v1, (a0)
ret
.size gcm_init_rv64i_zvkb_zvbc,.-gcm_init_rv64i_zvkb_zvbc
.text
.p2align 3
.globl gcm_gmult_rv64i_zvkb_zvbc
.type gcm_gmult_rv64i_zvkb_zvbc,@function
gcm_gmult_rv64i_zvkb_zvbc:
ld t0, (a1)
ld t1, 8(a1)
li t2, 63
la t3, Lpolymod
ld t3, 8(t3)
# Load/store data in reverse order.
# This is needed as a part of endianness swap.
add a0, a0, 8
li t4, -8
.word 0xc1817057 # vsetivli x0, 2, e64, m1, tu, mu
.word 198537863 # vlse64.v v5, (a0), t4
.word 1247060695 # vrev8.v v5, v5
# Multiplication
# Do two 64x64 multiplications in one go to save some time
# and simplify things.
# A = a1a0 (t1, t0)
# B = b1b0 (v5)
# C = c1c0 (256 bit)
# c1 = a1b1 + (a0b1)h + (a1b0)h
# c0 = a0b0 + (a0b1)l + (a1b0)h
# v1 = (a0b1)l,(a0b0)l
.word 844292311 # vclmul.vx v1, v5, t0
# v3 = (a0b1)h,(a0b0)h
.word 911401431 # vclmulh.vx v3, v5, t0
# v4 = (a1b1)l,(a1b0)l
.word 844325463 # vclmul.vx v4, v5, t1
# v2 = (a1b1)h,(a1b0)h
.word 911434071 # vclmulh.vx v2, v5, t1
# Is there a better way to do this?
# Would need to swap the order of elements within a vector register.
.word 976270039 # vslideup.vi v5, v3, 1
.word 977318743 # vslideup.vi v6, v4, 1
.word 1043378647 # vslidedown.vi v3, v3, 1
.word 1044427351 # vslidedown.vi v4, v4, 1
.word 1577103447 # vmv.v.i v0, 1
# v2 += (a0b1)h
.word 740393303 # vxor.vv v2, v2, v3, v0.t
# v2 += (a1b1)l
.word 740426071 # vxor.vv v2, v2, v4, v0.t
.word 1577136215 # vmv.v.i v0, 2
# v1 += (a0b0)h,0
.word 739410135 # vxor.vv v1, v1, v5, v0.t
# v1 += (a1b0)l,0
.word 739442903 # vxor.vv v1, v1, v6, v0.t
# Now the 256bit product should be stored in (v2,v1)
# v1 = (a0b1)l + (a0b0)h + (a1b0)l, (a0b0)l
# v2 = (a1b1)h, (a1b0)h + (a0b1)h + (a1b1)l
# Reduction
# Let C := A*B = c3,c2,c1,c0 = v2[1],v2[0],v1[1],v1[0]
# This is a slight variation of the Gueron's Montgomery reduction.
# The difference being the order of some operations has been changed,
# to make a better use of vclmul(h) instructions.
# First step:
# c1 += (c0 * P)l
# vmv.v.i v0, 2
.word 940618199 # vslideup.vi v3, v1, 1, v0.t
.word 809394647 # vclmul.vx v3, v3, t3, v0.t
.word 739344599 # vxor.vv v1, v1, v3, v0.t
# Second step:
# D = d1,d0 is final result
# We want:
# m1 = c1 + (c1 * P)h
# m0 = (c1 * P)l + (c0 * P)h + c0
# d1 = c3 + m1
# d0 = c2 + m0
#v3 = (c1 * P)l, 0
.word 807297495 # vclmul.vx v3, v1, t3, v0.t
#v4 = (c1 * P)h, (c0 * P)h
.word 907960919 # vclmulh.vx v4, v1, t3
.word 1577103447 # vmv.v.i v0, 1
.word 1043378647 # vslidedown.vi v3, v3, 1
.word 772931799 # vxor.vv v1, v1, v4
.word 739344599 # vxor.vv v1, v1, v3, v0.t
# XOR in the upper upper part of the product
.word 773882199 # vxor.vv v2, v2, v1
.word 1243914583 # vrev8.v v2, v2
.word 198537511 # vsse64.v v2, (a0), t4
ret
.size gcm_gmult_rv64i_zvkb_zvbc,.-gcm_gmult_rv64i_zvkb_zvbc
.p2align 3
.globl gcm_ghash_rv64i_zvkb_zvbc
.type gcm_ghash_rv64i_zvkb_zvbc,@function
gcm_ghash_rv64i_zvkb_zvbc:
ld t0, (a1)
ld t1, 8(a1)
li t2, 63
la t3, Lpolymod
ld t3, 8(t3)
# Load/store data in reverse order.
# This is needed as a part of endianness swap.
add a0, a0, 8
add a2, a2, 8
li t4, -8
.word 0xc1817057 # vsetivli x0, 2, e64, m1, tu, mu
.word 198537863 # vlse64.v v5, (a0), t4
Lstep:
# Read input data
.word 198603655 # vle64.v v0, (a2)
add a2, a2, 16
add a3, a3, -16
# XOR them into Xi
.word 777224919 # vxor.vv v0, v0, v1
.word 1247060695 # vrev8.v v5, v5
# Multiplication
# Do two 64x64 multiplications in one go to save some time
# and simplify things.
# A = a1a0 (t1, t0)
# B = b1b0 (v5)
# C = c1c0 (256 bit)
# c1 = a1b1 + (a0b1)h + (a1b0)h
# c0 = a0b0 + (a0b1)l + (a1b0)h
# v1 = (a0b1)l,(a0b0)l
.word 844292311 # vclmul.vx v1, v5, t0
# v3 = (a0b1)h,(a0b0)h
.word 911401431 # vclmulh.vx v3, v5, t0
# v4 = (a1b1)l,(a1b0)l
.word 844325463 # vclmul.vx v4, v5, t1
# v2 = (a1b1)h,(a1b0)h
.word 911434071 # vclmulh.vx v2, v5, t1
# Is there a better way to do this?
# Would need to swap the order of elements within a vector register.
.word 976270039 # vslideup.vi v5, v3, 1
.word 977318743 # vslideup.vi v6, v4, 1
.word 1043378647 # vslidedown.vi v3, v3, 1
.word 1044427351 # vslidedown.vi v4, v4, 1
.word 1577103447 # vmv.v.i v0, 1
# v2 += (a0b1)h
.word 740393303 # vxor.vv v2, v2, v3, v0.t
# v2 += (a1b1)l
.word 740426071 # vxor.vv v2, v2, v4, v0.t
.word 1577136215 # vmv.v.i v0, 2
# v1 += (a0b0)h,0
.word 739410135 # vxor.vv v1, v1, v5, v0.t
# v1 += (a1b0)l,0
.word 739442903 # vxor.vv v1, v1, v6, v0.t
# Now the 256bit product should be stored in (v2,v1)
# v1 = (a0b1)l + (a0b0)h + (a1b0)l, (a0b0)l
# v2 = (a1b1)h, (a1b0)h + (a0b1)h + (a1b1)l
# Reduction
# Let C := A*B = c3,c2,c1,c0 = v2[1],v2[0],v1[1],v1[0]
# This is a slight variation of the Gueron's Montgomery reduction.
# The difference being the order of some operations has been changed,
# to make a better use of vclmul(h) instructions.
# First step:
# c1 += (c0 * P)l
# vmv.v.i v0, 2
.word 940618199 # vslideup.vi v3, v1, 1, v0.t
.word 809394647 # vclmul.vx v3, v3, t3, v0.t
.word 739344599 # vxor.vv v1, v1, v3, v0.t
# Second step:
# D = d1,d0 is final result
# We want:
# m1 = c1 + (c1 * P)h
# m0 = (c1 * P)l + (c0 * P)h + c0
# d1 = c3 + m1
# d0 = c2 + m0
#v3 = (c1 * P)l, 0
.word 807297495 # vclmul.vx v3, v1, t3, v0.t
#v4 = (c1 * P)h, (c0 * P)h
.word 907960919 # vclmulh.vx v4, v1, t3
.word 1577103447 # vmv.v.i v0, 1
.word 1043378647 # vslidedown.vi v3, v3, 1
.word 772931799 # vxor.vv v1, v1, v4
.word 739344599 # vxor.vv v1, v1, v3, v0.t
# XOR in the upper upper part of the product
.word 773882199 # vxor.vv v2, v2, v1
.word 1243914967 # vrev8.v v2, v2
bnez a3, Lstep
.word 198537895 # vsse64.v v2, (a0), t4
ret
.size gcm_ghash_rv64i_zvkb_zvbc,.-gcm_ghash_rv64i_zvkb_zvbc
.p2align 4
Lpolymod:
.dword 0x0000000000000001
.dword 0xc200000000000000
.size Lpolymod,.-Lpolymod
@@ -0,0 +1,81 @@
.text
.p2align 3
.globl gcm_init_rv64i_zvkg
.type gcm_init_rv64i_zvkg,@function
gcm_init_rv64i_zvkg:
ld a2, 0(a1)
ld a3, 8(a1)
sb a2, 7(a0)
srli t0, a2, 8
sb t0, 6(a0)
srli t0, a2, 16
sb t0, 5(a0)
srli t0, a2, 24
sb t0, 4(a0)
srli t0, a2, 32
sb t0, 3(a0)
srli t0, a2, 40
sb t0, 2(a0)
srli t0, a2, 48
sb t0, 1(a0)
srli t0, a2, 56
sb t0, 0(a0)
sb a3, 15(a0)
srli t0, a3, 8
sb t0, 14(a0)
srli t0, a3, 16
sb t0, 13(a0)
srli t0, a3, 24
sb t0, 12(a0)
srli t0, a3, 32
sb t0, 11(a0)
srli t0, a3, 40
sb t0, 10(a0)
srli t0, a3, 48
sb t0, 9(a0)
srli t0, a3, 56
sb t0, 8(a0)
ret
.size gcm_init_rv64i_zvkg,.-gcm_init_rv64i_zvkg
.p2align 3
.globl gcm_init_rv64i_zvkg_zvkb
.type gcm_init_rv64i_zvkg_zvkb,@function
gcm_init_rv64i_zvkg_zvkb:
.word 0xc1817057 # vsetivli x0, 2, e64, m1, ta, ma
.word 33943559 # vle64.v v0, (a1)
.word 1241817175 # vrev8.v v0, v0
.word 33910823 # vse64.v v0, (a0)
ret
.size gcm_init_rv64i_zvkg_zvkb,.-gcm_init_rv64i_zvkg_zvkb
.p2align 3
.globl gcm_gmult_rv64i_zvkg
.type gcm_gmult_rv64i_zvkg,@function
gcm_gmult_rv64i_zvkg:
.word 0xc1027057
.word 33939719
.word 33906823
.word 2720571639
.word 33906855
ret
.size gcm_gmult_rv64i_zvkg,.-gcm_gmult_rv64i_zvkg
.p2align 3
.globl gcm_ghash_rv64i_zvkg
.type gcm_ghash_rv64i_zvkg,@function
gcm_ghash_rv64i_zvkg:
.word 0xc1027057
.word 33939719
.word 33906823
Lstep:
.word 33972615
add a2, a2, 16
add a3, a3, -16
.word 2988548343
bnez a3, Lstep
.word 33906855
ret
.size gcm_ghash_rv64i_zvkg,.-gcm_ghash_rv64i_zvkg
@@ -0,0 +1,613 @@
.text
.p2align 3
.globl gcm_init_rv64i_zbc
.type gcm_init_rv64i_zbc,@function
gcm_init_rv64i_zbc:
ld a2,0(a1)
ld a3,8(a1)
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a2, 1
and t1, t1, t0
and a2, a2, t0
srli a2, a2, 1
or a2, t1, a2
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a2, 2
and t1, t1, t0
and a2, a2, t0
srli a2, a2, 2
or a2, t1, a2
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a2, 4
and t1, t1, t0
and a2, a2, t0
srli a2, a2, 4
or a2, t1, a2
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a3, 1
and t1, t1, t0
and a3, a3, t0
srli a3, a3, 1
or a3, t1, a3
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a3, 2
and t1, t1, t0
and a3, a3, t0
srli a3, a3, 2
or a3, t1, a3
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a3, 4
and t1, t1, t0
and a3, a3, t0
srli a3, a3, 4
or a3, t1, a3
sb a2, 7(a0)
srli t0, a2, 8
sb t0, 6(a0)
srli t0, a2, 16
sb t0, 5(a0)
srli t0, a2, 24
sb t0, 4(a0)
srli t0, a2, 32
sb t0, 3(a0)
srli t0, a2, 40
sb t0, 2(a0)
srli t0, a2, 48
sb t0, 1(a0)
srli t0, a2, 56
sb t0, 0(a0)
sb a3, 15(a0)
srli t0, a3, 8
sb t0, 14(a0)
srli t0, a3, 16
sb t0, 13(a0)
srli t0, a3, 24
sb t0, 12(a0)
srli t0, a3, 32
sb t0, 11(a0)
srli t0, a3, 40
sb t0, 10(a0)
srli t0, a3, 48
sb t0, 9(a0)
srli t0, a3, 56
sb t0, 8(a0)
ret
.size gcm_init_rv64i_zbc,.-gcm_init_rv64i_zbc
.p2align 3
.globl gcm_init_rv64i_zbc__zbb
.type gcm_init_rv64i_zbc__zbb,@function
gcm_init_rv64i_zbc__zbb:
ld a2,0(a1)
ld a3,8(a1)
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a2, 1
and t1, t1, t0
and a2, a2, t0
srli a2, a2, 1
or a2, t1, a2
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a2, 2
and t1, t1, t0
and a2, a2, t0
srli a2, a2, 2
or a2, t1, a2
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a2, 4
and t1, t1, t0
and a2, a2, t0
srli a2, a2, 4
or a2, t1, a2
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a3, 1
and t1, t1, t0
and a3, a3, t0
srli a3, a3, 1
or a3, t1, a3
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a3, 2
and t1, t1, t0
and a3, a3, t0
srli a3, a3, 2
or a3, t1, a3
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a3, 4
and t1, t1, t0
and a3, a3, t0
srli a3, a3, 4
or a3, t1, a3
.word 1803965971
.word 1803998867
sd a2,0(a0)
sd a3,8(a0)
ret
.size gcm_init_rv64i_zbc__zbb,.-gcm_init_rv64i_zbc__zbb
.p2align 3
.globl gcm_init_rv64i_zbc__zbkb
.type gcm_init_rv64i_zbc__zbkb,@function
gcm_init_rv64i_zbc__zbkb:
ld t0,0(a1)
ld t1,8(a1)
.word 1752355475
.word 1752388371
.word 1803735699
.word 1803768595
sd t0,0(a0)
sd t1,8(a0)
ret
.size gcm_init_rv64i_zbc__zbkb,.-gcm_init_rv64i_zbc__zbkb
.p2align 3
.globl gcm_gmult_rv64i_zbc
.type gcm_gmult_rv64i_zbc,@function
gcm_gmult_rv64i_zbc:
# Load Xi and bit-reverse it
ld a4, 0(a0)
ld a5, 8(a0)
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a4, 1
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 1
or a4, t1, a4
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a4, 2
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 2
or a4, t1, a4
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a4, 4
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 4
or a4, t1, a4
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a5, 1
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 1
or a5, t1, a5
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a5, 2
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 2
or a5, t1, a5
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a5, 4
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 4
or a5, t1, a5
# Load the key (already bit-reversed)
ld a6, 0(a1)
ld a7, 8(a1)
# Load the reduction constant
la t6, Lpolymod
lbu t6, 0(t6)
# Multiplication (without Karatsuba)
.word 186105395
.word 186094515
.word 186072883
.word 186061619
xor t2, t2, t5
.word 185057075
.word 185048755
xor t2, t2, t5
xor t1, t1, t4
.word 185024307
.word 185012915
xor t1, t1, t5
# Reduction with clmul
.word 201211699
.word 201203379
xor t2, t2, t5
xor t1, t1, t4
.word 200523571
.word 200515251
xor a5, t1, t5
xor a4, t0, t4
# Bit-reverse Xi back and store it
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a4, 1
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 1
or a4, t1, a4
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a4, 2
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 2
or a4, t1, a4
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a4, 4
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 4
or a4, t1, a4
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a5, 1
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 1
or a5, t1, a5
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a5, 2
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 2
or a5, t1, a5
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a5, 4
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 4
or a5, t1, a5
sd a4, 0(a0)
sd a5, 8(a0)
ret
.size gcm_gmult_rv64i_zbc,.-gcm_gmult_rv64i_zbc
.p2align 3
.globl gcm_gmult_rv64i_zbc__zbkb
.type gcm_gmult_rv64i_zbc__zbkb,@function
gcm_gmult_rv64i_zbc__zbkb:
# Load Xi and bit-reverse it
ld a4, 0(a0)
ld a5, 8(a0)
.word 1752651539
.word 1752684435
# Load the key (already bit-reversed)
ld a6, 0(a1)
ld a7, 8(a1)
# Load the reduction constant
la t6, Lpolymod
lbu t6, 0(t6)
# Multiplication (without Karatsuba)
.word 186105395
.word 186094515
.word 186072883
.word 186061619
xor t2, t2, t5
.word 185057075
.word 185048755
xor t2, t2, t5
xor t1, t1, t4
.word 185024307
.word 185012915
xor t1, t1, t5
# Reduction with clmul
.word 201211699
.word 201203379
xor t2, t2, t5
xor t1, t1, t4
.word 200523571
.word 200515251
xor a5, t1, t5
xor a4, t0, t4
# Bit-reverse Xi back and store it
.word 1752651539
.word 1752684435
sd a4, 0(a0)
sd a5, 8(a0)
ret
.size gcm_gmult_rv64i_zbc__zbkb,.-gcm_gmult_rv64i_zbc__zbkb
.p2align 3
.globl gcm_ghash_rv64i_zbc
.type gcm_ghash_rv64i_zbc,@function
gcm_ghash_rv64i_zbc:
# Load Xi and bit-reverse it
ld a4, 0(a0)
ld a5, 8(a0)
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a4, 1
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 1
or a4, t1, a4
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a4, 2
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 2
or a4, t1, a4
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a4, 4
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 4
or a4, t1, a4
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a5, 1
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 1
or a5, t1, a5
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a5, 2
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 2
or a5, t1, a5
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a5, 4
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 4
or a5, t1, a5
# Load the key (already bit-reversed)
ld a6, 0(a1)
ld a7, 8(a1)
# Load the reduction constant
la t6, Lpolymod
lbu t6, 0(t6)
Lstep:
# Load the input data, bit-reverse them, and XOR them with Xi
ld t4, 0(a2)
ld t5, 8(a2)
add a2, a2, 16
add a3, a3, -16
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, t4, 1
and t1, t1, t0
and t4, t4, t0
srli t4, t4, 1
or t4, t1, t4
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, t4, 2
and t1, t1, t0
and t4, t4, t0
srli t4, t4, 2
or t4, t1, t4
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, t4, 4
and t1, t1, t0
and t4, t4, t0
srli t4, t4, 4
or t4, t1, t4
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, t5, 1
and t1, t1, t0
and t5, t5, t0
srli t5, t5, 1
or t5, t1, t5
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, t5, 2
and t1, t1, t0
and t5, t5, t0
srli t5, t5, 2
or t5, t1, t5
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, t5, 4
and t1, t1, t0
and t5, t5, t0
srli t5, t5, 4
or t5, t1, t5
xor a4, a4, t4
xor a5, a5, t5
# Multiplication (without Karatsuba)
.word 186105395
.word 186094515
.word 186072883
.word 186061619
xor t2, t2, t5
.word 185057075
.word 185048755
xor t2, t2, t5
xor t1, t1, t4
.word 185024307
.word 185012915
xor t1, t1, t5
# Reduction with clmul
.word 201211699
.word 201203379
xor t2, t2, t5
xor t1, t1, t4
.word 200523571
.word 200515251
xor a5, t1, t5
xor a4, t0, t4
# Iterate over all blocks
bnez a3, Lstep
# Bit-reverse final Xi back and store it
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a4, 1
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 1
or a4, t1, a4
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a4, 2
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 2
or a4, t1, a4
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a4, 4
and t1, t1, t0
and a4, a4, t0
srli a4, a4, 4
or a4, t1, a4
la t2, Lbrev8_const
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
slli t1, a5, 1
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 1
or a5, t1, a5
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
slli t1, a5, 2
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 2
or a5, t1, a5
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
slli t1, a5, 4
and t1, t1, t0
and a5, a5, t0
srli a5, a5, 4
or a5, t1, a5
sd a4, 0(a0)
sd a5, 8(a0)
ret
.size gcm_ghash_rv64i_zbc,.-gcm_ghash_rv64i_zbc
.p2align 3
.globl gcm_ghash_rv64i_zbc__zbkb
.type gcm_ghash_rv64i_zbc__zbkb,@function
gcm_ghash_rv64i_zbc__zbkb:
# Load Xi and bit-reverse it
ld a4, 0(a0)
ld a5, 8(a0)
.word 1752651539
.word 1752684435
# Load the key (already bit-reversed)
ld a6, 0(a1)
ld a7, 8(a1)
# Load the reduction constant
la t6, Lpolymod
lbu t6, 0(t6)
Lstep_zkbk:
# Load the input data, bit-reverse them, and XOR them with Xi
ld t4, 0(a2)
ld t5, 8(a2)
add a2, a2, 16
add a3, a3, -16
.word 1753144979
.word 1753177875
xor a4, a4, t4
xor a5, a5, t5
# Multiplication (without Karatsuba)
.word 186105395
.word 186094515
.word 186072883
.word 186061619
xor t2, t2, t5
.word 185057075
.word 185048755
xor t2, t2, t5
xor t1, t1, t4
.word 185024307
.word 185012915
xor t1, t1, t5
# Reduction with clmul
.word 201211699
.word 201203379
xor t2, t2, t5
xor t1, t1, t4
.word 200523571
.word 200515251
xor a5, t1, t5
xor a4, t0, t4
# Iterate over all blocks
bnez a3, Lstep_zkbk
# Bit-reverse final Xi back and store it
.word 1752651539
.word 1752684435
sd a4, 0(a0)
sd a5, 8(a0)
ret
.size gcm_ghash_rv64i_zbc__zbkb,.-gcm_ghash_rv64i_zbc__zbkb
.p2align 3
Lbrev8_const:
.dword 0xAAAAAAAAAAAAAAAA
.dword 0xCCCCCCCCCCCCCCCC
.dword 0xF0F0F0F0F0F0F0F0
.size Lbrev8_const,.-Lbrev8_const
Lpolymod:
.byte 0x87
.size Lpolymod,.-Lpolymod
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,71 @@
################################################################################
# int CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len)
################################################################################
.text
.balign 16
.globl CRYPTO_memcmp
.type CRYPTO_memcmp,@function
CRYPTO_memcmp:
li t0,0
beqz a2,2f # len == 0
1:
lbu t1,0(a0)
lbu t2,0(a1)
addi a0,a0,1
addi a1,a1,1
addi a2,a2,-1
xor t1,t1,t2
or t0,t0,t1
bgtz a2,1b
2:
mv a0,t0
ret
################################################################################
# void OPENSSL_cleanse(void *ptr, size_t len)
################################################################################
.text
.balign 16
.globl OPENSSL_cleanse
.type OPENSSL_cleanse,@function
OPENSSL_cleanse:
beqz a1,2f # len == 0, return
srli t0,a1,4
bnez t0,3f # len > 15
1: # Store <= 15 individual bytes
sb x0,0(a0)
addi a0,a0,1
addi a1,a1,-1
bnez a1,1b
2:
ret
3: # Store individual bytes until we are aligned
andi t0,a0,0x7
beqz t0,4f
sb x0,0(a0)
addi a0,a0,1
addi a1,a1,-1
j 3b
4: # Store aligned dwords
li t1,8
4:
sd x0,0(a0)
addi a0,a0,8
addi a1,a1,-8
bge a1,t1,4b # if len>=8 loop
bnez a1,1b # if len<8 and len != 0, store remaining bytes
ret
################################################################################
# size_t riscv_vlen_asm(void)
# Return VLEN (i.e. the length of a vector register in bits).
.p2align 3
.globl riscv_vlen_asm
.type riscv_vlen_asm,@function
riscv_vlen_asm:
# 0xc22 is CSR vlenb
csrr a0, 0xc22
slli a0, a0, 3
ret
.size riscv_vlen_asm,.-riscv_vlen_asm
@@ -0,0 +1,229 @@
.text
.p2align 2
.globl sha256_block_data_order_zvkb_zvknha_or_zvknhb
.type sha256_block_data_order_zvkb_zvknha_or_zvknhb,@function
sha256_block_data_order_zvkb_zvknha_or_zvknhb:
.word 3439489111
la a3, K256 # Load round constants K256
.word 34006279
addi a3, a3, 16
.word 34006407
addi a3, a3, 16
.word 34006535
addi a3, a3, 16
.word 34006663
addi a3, a3, 16
.word 34006791
addi a3, a3, 16
.word 34006919
addi a3, a3, 16
.word 34007047
addi a3, a3, 16
.word 34007175
addi a3, a3, 16
.word 34007303
addi a3, a3, 16
.word 34007431
addi a3, a3, 16
.word 34007559
addi a3, a3, 16
.word 34007687
addi a3, a3, 16
.word 34007815
addi a3, a3, 16
.word 34007943
addi a3, a3, 16
.word 34008071
addi a3, a3, 16
.word 34008199
# H is stored as {a,b,c,d},{e,f,g,h}, but we need {f,e,b,a},{h,g,d,c}
# The dst vtype is e32m1 and the index vtype is e8mf4.
# We use index-load with the following index pattern at v26.
# i8 index:
# 20, 16, 4, 0
# Instead of setting the i8 index, we could use a single 32bit
# little-endian value to cover the 4xi8 index.
# i32 value:
# 0x 00 04 10 14
li t4, 0x00041014
.word 3439390807
.word 1578028375
addi t3, a0, 8
# Use index-load to get {f,e,b,a},{h,g,d,c}
.word 3439489111
.word 128254727
.word 128844679
# Setup v0 mask for the vmerge to replace the first word (idx==0) in key-scheduling.
# The AVL is 4 in SHA, so we could use a single e8(8 element masking) for masking.
.word 3422613591
.word 1577103447
.word 3439489111
L_round_loop:
# Decrement length by 1
add a2, a2, -1
# Keep the current state as we need it later: H' = H+{a',b',c',...,h'}.
.word 1577258839
.word 1577291735
# Load the 512-bits of the message block in v1-v4 and perform
# an endian swap on each 4 bytes element.
.word 33939591
.word 1242865879
add a1, a1, 16
.word 33939719
.word 1243914583
add a1, a1, 16
.word 33939847
.word 1244963287
add a1, a1, 16
.word 33939975
.word 1246011991
add a1, a1, 16
# Quad-round 0 (+0, Wt from oldest to newest in v1->v2->v3->v4)
.word 44073687
.word 3194135543
.word 3128075127
.word 1546715863
.word 3058835703 # Generate W[19:16]
# Quad-round 1 (+1, v2->v3->v4->v1)
.word 45155031
.word 3194135543
.word 3128075127
.word 1547797207
.word 3058737527 # Generate W[23:20]
# Quad-round 2 (+2, v3->v4->v1->v2)
.word 46236375
.word 3194135543
.word 3128075127
.word 1544684247
.word 3058770423 # Generate W[27:24]
# Quad-round 3 (+3, v4->v1->v2->v3)
.word 47317719
.word 3194135543
.word 3128075127
.word 1545634519
.word 3058803319 # Generate W[31:28]
# Quad-round 4 (+0, v1->v2->v3->v4)
.word 48267991
.word 3194135543
.word 3128075127
.word 1546715863
.word 3058835703 # Generate W[35:32]
# Quad-round 5 (+1, v2->v3->v4->v1)
.word 49349335
.word 3194135543
.word 3128075127
.word 1547797207
.word 3058737527 # Generate W[39:36]
# Quad-round 6 (+2, v3->v4->v1->v2)
.word 50430679
.word 3194135543
.word 3128075127
.word 1544684247
.word 3058770423 # Generate W[43:40]
# Quad-round 7 (+3, v4->v1->v2->v3)
.word 51512023
.word 3194135543
.word 3128075127
.word 1545634519
.word 3058803319 # Generate W[47:44]
# Quad-round 8 (+0, v1->v2->v3->v4)
.word 52462295
.word 3194135543
.word 3128075127
.word 1546715863
.word 3058835703 # Generate W[51:48]
# Quad-round 9 (+1, v2->v3->v4->v1)
.word 53543639
.word 3194135543
.word 3128075127
.word 1547797207
.word 3058737527 # Generate W[55:52]
# Quad-round 10 (+2, v3->v4->v1->v2)
.word 54624983
.word 3194135543
.word 3128075127
.word 1544684247
.word 3058770423 # Generate W[59:56]
# Quad-round 11 (+3, v4->v1->v2->v3)
.word 55706327
.word 3194135543
.word 3128075127
.word 1545634519
.word 3058803319 # Generate W[63:60]
# Quad-round 12 (+0, v1->v2->v3->v4)
# Note that we stop generating new message schedule words (Wt, v1-13)
# as we already generated all the words we end up consuming (i.e., W[63:60]).
.word 56656599
.word 3194135543
.word 3128075127
# Quad-round 13 (+1, v2->v3->v4->v1)
.word 57737943
.word 3194135543
.word 3128075127
# Quad-round 14 (+2, v3->v4->v1->v2)
.word 58819287
.word 3194135543
.word 3128075127
# Quad-round 15 (+3, v4->v1->v2->v3)
.word 59900631
.word 3194135543
.word 3128075127
# H' = H+{a',b',c',...,h'}
.word 65209175
.word 66290647
bnez a2, L_round_loop
# Store {f,e,b,a},{h,g,d,c} back to {a,b,c,d},{e,f,g,h}.
.word 128254759
.word 128844711
ret
.size sha256_block_data_order_zvkb_zvknha_or_zvknhb,.-sha256_block_data_order_zvkb_zvknha_or_zvknhb
.p2align 2
.type K256,@object
K256:
.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
.size K256,.-K256
@@ -0,0 +1,184 @@
.text
.p2align 2
.globl sha512_block_data_order_zvkb_zvknhb
.type sha512_block_data_order_zvkb_zvknhb,@function
sha512_block_data_order_zvkb_zvknhb:
.word 3448926295
# H is stored as {a,b,c,d},{e,f,g,h}, but we need {f,e,b,a},{h,g,d,c}
# The dst vtype is e64m2 and the index vtype is e8mf4.
# We use index-load with the following index pattern at v1.
# i8 index:
# 40, 32, 8, 0
# Instead of setting the i8 index, we could use a single 32bit
# little-endian value to cover the 4xi8 index.
# i32 value:
# 0x 00 08 20 28
li t4, 0x00082028
.word 3439390807
.word 1578025175
addi t3, a0, 16
# Use index-load to get {f,e,b,a},{h,g,d,c}
.word 3448926295
.word 102042375
.word 102632455
# Setup v0 mask for the vmerge to replace the first word (idx==0) in key-scheduling.
# The AVL is 4 in SHA, so we could use a single e8(8 element masking) for masking.
.word 3422613591
.word 1577103447
.word 3448926295
L_round_loop:
# Load round constants K512
la a3, K512
# Decrement length by 1
addi a2, a2, -1
# Keep the current state as we need it later: H' = H+{a',b',c',...,h'}.
.word 1577782615
.word 1577848407
# Load the 1024-bits of the message block in v10-v16 and perform the endian
# swap.
.word 33944839
.word 1252304215
addi a1, a1, 32
.word 33945095
.word 1254401623
addi a1, a1, 32
.word 33945351
.word 1256499031
addi a1, a1, 32
.word 33945607
.word 1258596439
addi a1, a1, 32
.rept 4
# Quad-round 0 (+0, v10->v12->v14->v16)
.word 34011655
addi a3, a3, 32
.word 54856023
.word 3211340919
.word 3146328951
.word 1558579543
.word 3072861559
# Quad-round 1 (+1, v12->v14->v16->v10)
.word 34011655
addi a3, a3, 32
.word 54921559
.word 3211340919
.word 3146328951
.word 1560742231
.word 3072665207
# Quad-round 2 (+2, v14->v16->v10->v12)
.word 34011655
addi a3, a3, 32
.word 54987095
.word 3211340919
.word 3146328951
.word 1554516311
.word 3072730999
# Quad-round 3 (+3, v16->v10->v12->v14)
.word 34011655
addi a3, a3, 32
.word 55052631
.word 3211340919
.word 3146328951
.word 1556416855
.word 3072796791
.endr
# Quad-round 16 (+0, v10->v12->v14->v16)
# Note that we stop generating new message schedule words (Wt, v10-16)
# as we already generated all the words we end up consuming (i.e., W[79:76]).
.word 34011655
addi a3, a3, 32
.word 54856023
.word 3211340919
.word 3146328951
# Quad-round 17 (+1, v12->v14->v16->v10)
.word 34011655
addi a3, a3, 32
.word 54921559
.word 3211340919
.word 3146328951
# Quad-round 18 (+2, v14->v16->v10->v12)
.word 34011655
addi a3, a3, 32
.word 54987095
.word 3211340919
.word 3146328951
# Quad-round 19 (+3, v16->v10->v12->v14)
.word 34011655
# No t1 increment needed.
.word 55052631
.word 3211340919
.word 3146328951
# H' = H+{a',b',c',...,h'}
.word 61541207
.word 63704151
bnez a2, L_round_loop
# Store {f,e,b,a},{h,g,d,c} back to {a,b,c,d},{e,f,g,h}.
.word 102042407
.word 102632487
ret
.size sha512_block_data_order_zvkb_zvknhb,.-sha512_block_data_order_zvkb_zvknhb
.p2align 3
.type K512,@object
K512:
.dword 0x428a2f98d728ae22, 0x7137449123ef65cd
.dword 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc
.dword 0x3956c25bf348b538, 0x59f111f1b605d019
.dword 0x923f82a4af194f9b, 0xab1c5ed5da6d8118
.dword 0xd807aa98a3030242, 0x12835b0145706fbe
.dword 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2
.dword 0x72be5d74f27b896f, 0x80deb1fe3b1696b1
.dword 0x9bdc06a725c71235, 0xc19bf174cf692694
.dword 0xe49b69c19ef14ad2, 0xefbe4786384f25e3
.dword 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65
.dword 0x2de92c6f592b0275, 0x4a7484aa6ea6e483
.dword 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5
.dword 0x983e5152ee66dfab, 0xa831c66d2db43210
.dword 0xb00327c898fb213f, 0xbf597fc7beef0ee4
.dword 0xc6e00bf33da88fc2, 0xd5a79147930aa725
.dword 0x06ca6351e003826f, 0x142929670a0e6e70
.dword 0x27b70a8546d22ffc, 0x2e1b21385c26c926
.dword 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df
.dword 0x650a73548baf63de, 0x766a0abb3c77b2a8
.dword 0x81c2c92e47edaee6, 0x92722c851482353b
.dword 0xa2bfe8a14cf10364, 0xa81a664bbc423001
.dword 0xc24b8b70d0f89791, 0xc76c51a30654be30
.dword 0xd192e819d6ef5218, 0xd69906245565a910
.dword 0xf40e35855771202a, 0x106aa07032bbd1b8
.dword 0x19a4c116b8d2d0c8, 0x1e376c085141ab53
.dword 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8
.dword 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb
.dword 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3
.dword 0x748f82ee5defb2fc, 0x78a5636f43172f60
.dword 0x84c87814a1f0ab72, 0x8cc702081a6439ec
.dword 0x90befffa23631e28, 0xa4506cebde82bde9
.dword 0xbef9a3f7b2c67915, 0xc67178f2e372532b
.dword 0xca273eceea26619c, 0xd186b8c721c0c207
.dword 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178
.dword 0x06f067aa72176fba, 0x0a637dc5a2c898a6
.dword 0x113f9804bef90dae, 0x1b710b35131c471b
.dword 0x28db77f523047d84, 0x32caab7b40c72493
.dword 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c
.dword 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a
.dword 0x5fcb6fab3ad6faec, 0x6c44198c4a475817
.size K512,.-K512
@@ -0,0 +1,150 @@
.text
.text
.p2align 3
.globl ossl_hwsm3_block_data_order_zvksh
.type ossl_hwsm3_block_data_order_zvksh,@function
ossl_hwsm3_block_data_order_zvksh:
.word 3440668759
# Load initial state of hash context (c->A-H).
.word 33906695
.word 1241817175
L_sm3_loop:
# Copy the previous state to v2.
# It will be XOR'ed with the current state at the end of the round.
.word 1577058647
# Load the 64B block in 2x32B chunks.
.word 33940231 # v6 := {w7, ..., w0}
addi a1, a1, 32
.word 33940487 # v8 := {w15, ..., w8}
addi a1, a1, 32
addi a2, a2, -1
# As vsm3c consumes only w0, w1, w4, w5 we need to slide the input
# 2 elements down so we process elements w2, w3, w6, w7
# This will be repeated for each odd round.
.word 1046557271 # v4 := {X, X, w7, ..., w2}
.word 2925535351
.word 2923470967
# Prepare a vector with {w11, ..., w4}
.word 1044460119 # v4 := {X, X, X, X, w7, ..., w4}
.word 981611095 # v4 := {w11, w10, w9, w8, w7, w6, w5, w4}
.word 2923503735
.word 1044460119 # v4 := {X, X, w11, w10, w9, w8, w7, w6}
.word 2923536503
.word 2927763575
.word 1048654423 # v4 := {X, X, w15, w14, w13, w12, w11, w10}
.word 2923602039
.word 2189632375 # v6 := {w23, w22, w21, w20, w19, w18, w17, w16}
# Prepare a register with {w19, w18, w17, w16, w15, w14, w13, w12}
.word 1044460119 # v4 := {X, X, X, X, w15, w14, w13, w12}
.word 979513943 # v4 := {w19, w18, w17, w16, w15, w14, w13, w12}
.word 2923634807
.word 1044460119 # v4 := {X, X, w19, w18, w17, w16, w15, w14}
.word 2923667575
.word 2925797495
.word 1046557271 # v4 := {X, X, w23, w22, w21, w20, w19, w18}
.word 2923733111
.word 2187601015 # v8 := {w31, w30, w29, w28, w27, w26, w25, w24}
# Prepare a register with {w27, w26, w25, w24, w23, w22, w21, w20}
.word 1044460119 # v4 := {X, X, X, X, w23, w22, w21, w20}
.word 981611095 # v4 := {w27, w26, w25, w24, w23, w22, w21, w20}
.word 2923765879
.word 1044460119 # v4 := {X, X, w27, w26, w25, w24, w23, w22}
.word 2923798647
.word 2928025719
.word 1048654423 # v4 := {x, X, w31, w30, w29, w28, w27, w26}
.word 2923864183
.word 2189632375 # v6 := {w32, w33, w34, w35, w36, w37, w38, w39}
# Prepare a register with {w35, w34, w33, w32, w31, w30, w29, w28}
.word 1044460119 # v4 := {X, X, X, X, w31, w30, w29, w28}
.word 979513943 # v4 := {w35, w34, w33, w32, w31, w30, w29, w28}
.word 2923896951
.word 1044460119 # v4 := {X, X, w35, w34, w33, w32, w31, w30}
.word 2923929719
.word 2926059639
.word 1046557271 # v4 := {X, X, w39, w38, w37, w36, w35, w34}
.word 2923995255
.word 2187601015 # v8 := {w47, w46, w45, w44, w43, w42, w41, w40}
# Prepare a register with {w43, w42, w41, w40, w39, w38, w37, w36}
.word 1044460119 # v4 := {X, X, X, X, w39, w38, w37, w36}
.word 981611095 # v4 := {w43, w42, w41, w40, w39, w38, w37, w36}
.word 2924028023
.word 1044460119 # v4 := {X, X, w43, w42, w41, w40, w39, w38}
.word 2924060791
.word 2928287863
.word 1048654423 # v4 := {X, X, w47, w46, w45, w44, w43, w42}
.word 2924126327
.word 2189632375 # v6 := {w55, w54, w53, w52, w51, w50, w49, w48}
# Prepare a register with {w51, w50, w49, w48, w47, w46, w45, w44}
.word 1044460119 # v4 := {X, X, X, X, w47, w46, w45, w44}
.word 979513943 # v4 := {w51, w50, w49, w48, w47, w46, w45, w44}
.word 2924159095
.word 1044460119 # v4 := {X, X, w51, w50, w49, w48, w47, w46}
.word 2924191863
.word 2926321783
.word 1046557271 # v4 := {X, X, w55, w54, w53, w52, w51, w50}
.word 2924257399
.word 2187601015 # v8 := {w63, w62, w61, w60, w59, w58, w57, w56}
# Prepare a register with {w59, w58, w57, w56, w55, w54, w53, w52}
.word 1044460119 # v4 := {X, X, X, X, w55, w54, w53, w52}
.word 981611095 # v4 := {w59, w58, w57, w56, w55, w54, w53, w52}
.word 2924290167
.word 1044460119 # v4 := {X, X, w59, w58, w57, w56, w55, w54}
.word 2924322935
.word 2928550007
.word 1048654423 # v4 := {X, X, w63, w62, w61, w60, w59, w58}
.word 2924388471
.word 2189632375 # v6 := {w71, w70, w69, w68, w67, w66, w65, w64}
# Prepare a register with {w67, w66, w65, w64, w63, w62, w61, w60}
.word 1044460119 # v4 := {X, X, X, X, w63, w62, w61, w60}
.word 979513943 # v4 := {w67, w66, w65, w64, w63, w62, w61, w60}
.word 2924421239
.word 1044460119 # v4 := {X, X, w67, w66, w65, w64, w63, w62}
.word 2924454007
# XOR in the previous state.
.word 771817559
bnez a2, L_sm3_loop # Check if there are any more block to process
L_sm3_end:
.word 1241817175
.word 33906727
ret
.size ossl_hwsm3_block_data_order_zvksh,.-ossl_hwsm3_block_data_order_zvksh
@@ -0,0 +1,188 @@
.text
.p2align 3
.globl rv64i_zvksed_sm4_set_encrypt_key
.type rv64i_zvksed_sm4_set_encrypt_key,@function
rv64i_zvksed_sm4_set_encrypt_key:
.word 0xc1027057
# Load the user key
.word 33906823
.word 1242865879
# Load the FK.
la t0, FK
.word 33743111
# Generate round keys.
.word 772866263
.word 2249204215 # rk[0:3]
.word 2251334263 # rk[4:7]
.word 2252415735 # rk[8:11]
.word 2253497207 # rk[12:15]
.word 2254578679 # rk[16:19]
.word 2255660151 # rk[20:23]
.word 2256741623 # rk[24:27]
.word 2257823095 # rk[28:31]
# Store round keys
.word 33939879 # rk[0:3]
addi a1, a1, 16
.word 33940007 # rk[4:7]
addi a1, a1, 16
.word 33940135 # rk[8:11]
addi a1, a1, 16
.word 33940263 # rk[12:15]
addi a1, a1, 16
.word 33940391 # rk[16:19]
addi a1, a1, 16
.word 33940519 # rk[20:23]
addi a1, a1, 16
.word 33940647 # rk[24:27]
addi a1, a1, 16
.word 33940775 # rk[28:31]
li a0, 1
ret
.size rv64i_zvksed_sm4_set_encrypt_key,.-rv64i_zvksed_sm4_set_encrypt_key
.p2align 3
.globl rv64i_zvksed_sm4_set_decrypt_key
.type rv64i_zvksed_sm4_set_decrypt_key,@function
rv64i_zvksed_sm4_set_decrypt_key:
.word 0xc1027057
# Load the user key
.word 33906823
.word 1242865879
# Load the FK.
la t0, FK
.word 33743111
# Generate round keys.
.word 772866263
.word 2249204215 # rk[0:3]
.word 2251334263 # rk[4:7]
.word 2252415735 # rk[8:11]
.word 2253497207 # rk[12:15]
.word 2254578679 # rk[16:19]
.word 2255660151 # rk[20:23]
.word 2256741623 # rk[24:27]
.word 2257823095 # rk[28:31]
# Store round keys in reverse order
addi a1, a1, 12
li t1, -4
.word 174449959 # rk[31:28]
addi a1, a1, 16
.word 174449831 # rk[27:24]
addi a1, a1, 16
.word 174449703 # rk[23:20]
addi a1, a1, 16
.word 174449575 # rk[19:16]
addi a1, a1, 16
.word 174449447 # rk[15:12]
addi a1, a1, 16
.word 174449319 # rk[11:8]
addi a1, a1, 16
.word 174449191 # rk[7:4]
addi a1, a1, 16
.word 174449063 # rk[3:0]
li a0, 1
ret
.size rv64i_zvksed_sm4_set_decrypt_key,.-rv64i_zvksed_sm4_set_decrypt_key
.p2align 3
.globl rv64i_zvksed_sm4_encrypt
.type rv64i_zvksed_sm4_encrypt,@function
rv64i_zvksed_sm4_encrypt:
.word 0xc1027057
# Order of elements was adjusted in set_encrypt_key()
.word 33972487 # rk[0:3]
addi a2, a2, 16
.word 33972615 # rk[4:7]
addi a2, a2, 16
.word 33972743 # rk[8:11]
addi a2, a2, 16
.word 33972871 # rk[12:15]
addi a2, a2, 16
.word 33972999 # rk[16:19]
addi a2, a2, 16
.word 33973127 # rk[20:23]
addi a2, a2, 16
.word 33973255 # rk[24:27]
addi a2, a2, 16
.word 33973383 # rk[28:31]
# Load input data
.word 33906823
.word 1242865879
# Encrypt with all keys
.word 2787647735
.word 2788696311
.word 2789744887
.word 2790793463
.word 2791842039
.word 2792890615
.word 2793939191
.word 2794987767
# Save the ciphertext (in reverse element order)
.word 1242865879
li t0, -4
addi a1, a1, 12
.word 173400231
ret
.size rv64i_zvksed_sm4_encrypt,.-rv64i_zvksed_sm4_encrypt
.p2align 3
.globl rv64i_zvksed_sm4_decrypt
.type rv64i_zvksed_sm4_decrypt,@function
rv64i_zvksed_sm4_decrypt:
.word 0xc1027057
# Order of elements was adjusted in set_decrypt_key()
.word 33973383 # rk[31:28]
addi a2, a2, 16
.word 33973255 # rk[27:24]
addi a2, a2, 16
.word 33973127 # rk[23:20]
addi a2, a2, 16
.word 33972999 # rk[19:16]
addi a2, a2, 16
.word 33972871 # rk[15:11]
addi a2, a2, 16
.word 33972743 # rk[11:8]
addi a2, a2, 16
.word 33972615 # rk[7:4]
addi a2, a2, 16
.word 33972487 # rk[3:0]
# Load input data
.word 33906823
.word 1242865879
# Encrypt with all keys
.word 2794987767
.word 2793939191
.word 2792890615
.word 2791842039
.word 2790793463
.word 2789744887
.word 2788696311
.word 2787647735
# Save the ciphertext (in reverse element order)
.word 1242865879
li t0, -4
addi a1, a1, 12
.word 173400231
ret
.size rv64i_zvksed_sm4_decrypt,.-rv64i_zvksed_sm4_decrypt
# Family Key (little-endian 32-bit chunks)
.p2align 3
FK:
.word 0xA3B1BAC6, 0x56AA3350, 0x677D9197, 0xB27022DC
.size FK,.-FK
@@ -0,0 +1,37 @@
/* clang-format off */
/* WARNING: do not edit! */
/* Generated by Makefile from include/crypto/bn_conf.h.in */
/* clang-format on */
/*
* Copyright 2016-2021 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 OSSL_CRYPTO_BN_CONF_H
#define OSSL_CRYPTO_BN_CONF_H
#pragma once
/*
* The contents of this file are not used in the UEFI build, as
* both 32-bit and 64-bit builds are supported from a single run
* of the Configure script.
*/
/* Should we define BN_DIV2W here? */
/* Only one for the following should be defined */
/* clang-format off */
#define SIXTY_FOUR_BIT_LONG
/* clang-format on */
/* clang-format off */
#undef SIXTY_FOUR_BIT
/* clang-format on */
/* clang-format off */
#undef THIRTY_TWO_BIT
/* clang-format on */
#endif
@@ -0,0 +1,25 @@
/* clang-format off */
/* WARNING: do not edit! */
/* Generated by Makefile from include/crypto/dso_conf.h.in */
/* clang-format on */
/*
* Copyright 2016-2021 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 OSSL_CRYPTO_DSO_CONF_H
#define OSSL_CRYPTO_DSO_CONF_H
#pragma once
/* clang-format off */
# define DSO_DLFCN
# define HAVE_DLFCN_H
/* clang-format on */
/* clang-format off */
# define DSO_EXTENSION ".so"
/* clang-format on */
#endif
@@ -0,0 +1,473 @@
/*
* WARNING: do not edit!
* Generated by Makefile from include/internal/param_names.h.in
*
* Copyright 2023 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
*/
/* clang-format off */
/* clang-format on */
int ossl_param_find_pidx(const char *s);
/* Parameter name definitions - generated by util/perl/OpenSSL/paramnames.pm */
/* clang-format off */
#define NUM_PIDX 346
#define PIDX_ALG_PARAM_ALGORITHM_ID 0
#define PIDX_ALG_PARAM_ALGORITHM_ID_PARAMS 1
#define PIDX_ALG_PARAM_CIPHER 2
#define PIDX_ALG_PARAM_DIGEST 3
#define PIDX_ALG_PARAM_ENGINE 4
#define PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR 5
#define PIDX_ALG_PARAM_MAC 6
#define PIDX_ALG_PARAM_PROPERTIES 7
#define PIDX_ASYM_CIPHER_PARAM_DIGEST PIDX_PKEY_PARAM_DIGEST
#define PIDX_ASYM_CIPHER_PARAM_ENGINE PIDX_PKEY_PARAM_ENGINE
#define PIDX_ASYM_CIPHER_PARAM_FIPS_APPROVED_INDICATOR PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR
#define PIDX_ASYM_CIPHER_PARAM_FIPS_KEY_CHECK PIDX_PKEY_PARAM_FIPS_KEY_CHECK
#define PIDX_ASYM_CIPHER_PARAM_FIPS_RSA_PKCS15_PAD_DISABLED PIDX_PROV_PARAM_RSA_PKCS15_PAD_DISABLED
#define PIDX_ASYM_CIPHER_PARAM_IMPLICIT_REJECTION 8
#define PIDX_ASYM_CIPHER_PARAM_MGF1_DIGEST PIDX_PKEY_PARAM_MGF1_DIGEST
#define PIDX_ASYM_CIPHER_PARAM_MGF1_DIGEST_PROPS PIDX_PKEY_PARAM_MGF1_PROPERTIES
#define PIDX_ASYM_CIPHER_PARAM_OAEP_DIGEST PIDX_ALG_PARAM_DIGEST
#define PIDX_ASYM_CIPHER_PARAM_OAEP_DIGEST_PROPS 9
#define PIDX_ASYM_CIPHER_PARAM_OAEP_LABEL 10
#define PIDX_ASYM_CIPHER_PARAM_PAD_MODE PIDX_PKEY_PARAM_PAD_MODE
#define PIDX_ASYM_CIPHER_PARAM_PROPERTIES PIDX_PKEY_PARAM_PROPERTIES
#define PIDX_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION 11
#define PIDX_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION 12
#define PIDX_CAPABILITY_TLS_GROUP_ALG 13
#define PIDX_CAPABILITY_TLS_GROUP_ID 14
#define PIDX_CAPABILITY_TLS_GROUP_IS_KEM 15
#define PIDX_CAPABILITY_TLS_GROUP_MAX_DTLS 16
#define PIDX_CAPABILITY_TLS_GROUP_MAX_TLS 17
#define PIDX_CAPABILITY_TLS_GROUP_MIN_DTLS 18
#define PIDX_CAPABILITY_TLS_GROUP_MIN_TLS 19
#define PIDX_CAPABILITY_TLS_GROUP_NAME 20
#define PIDX_CAPABILITY_TLS_GROUP_NAME_INTERNAL 21
#define PIDX_CAPABILITY_TLS_GROUP_SECURITY_BITS 22
#define PIDX_CAPABILITY_TLS_SIGALG_CODE_POINT 23
#define PIDX_CAPABILITY_TLS_SIGALG_HASH_NAME 24
#define PIDX_CAPABILITY_TLS_SIGALG_HASH_OID 25
#define PIDX_CAPABILITY_TLS_SIGALG_IANA_NAME 26
#define PIDX_CAPABILITY_TLS_SIGALG_KEYTYPE 27
#define PIDX_CAPABILITY_TLS_SIGALG_KEYTYPE_OID 28
#define PIDX_CAPABILITY_TLS_SIGALG_MAX_DTLS 16
#define PIDX_CAPABILITY_TLS_SIGALG_MAX_TLS 17
#define PIDX_CAPABILITY_TLS_SIGALG_MIN_DTLS 18
#define PIDX_CAPABILITY_TLS_SIGALG_MIN_TLS 19
#define PIDX_CAPABILITY_TLS_SIGALG_NAME 29
#define PIDX_CAPABILITY_TLS_SIGALG_OID 30
#define PIDX_CAPABILITY_TLS_SIGALG_SECURITY_BITS 31
#define PIDX_CAPABILITY_TLS_SIGALG_SIG_NAME 32
#define PIDX_CAPABILITY_TLS_SIGALG_SIG_OID 33
#define PIDX_CIPHER_PARAM_AEAD 34
#define PIDX_CIPHER_PARAM_AEAD_IVLEN PIDX_CIPHER_PARAM_IVLEN
#define PIDX_CIPHER_PARAM_AEAD_IV_GENERATED 35
#define PIDX_CIPHER_PARAM_AEAD_MAC_KEY 36
#define PIDX_CIPHER_PARAM_AEAD_TAG 37
#define PIDX_CIPHER_PARAM_AEAD_TAGLEN 38
#define PIDX_CIPHER_PARAM_AEAD_TLS1_AAD 39
#define PIDX_CIPHER_PARAM_AEAD_TLS1_AAD_PAD 40
#define PIDX_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN 41
#define PIDX_CIPHER_PARAM_AEAD_TLS1_IV_FIXED 42
#define PIDX_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV 43
#define PIDX_CIPHER_PARAM_ALGORITHM_ID PIDX_ALG_PARAM_ALGORITHM_ID
#define PIDX_CIPHER_PARAM_ALGORITHM_ID_PARAMS PIDX_ALG_PARAM_ALGORITHM_ID_PARAMS
#define PIDX_CIPHER_PARAM_ALGORITHM_ID_PARAMS_OLD 44
#define PIDX_CIPHER_PARAM_BLOCK_SIZE 45
#define PIDX_CIPHER_PARAM_CTS 46
#define PIDX_CIPHER_PARAM_CTS_MODE 47
#define PIDX_CIPHER_PARAM_CUSTOM_IV 48
#define PIDX_CIPHER_PARAM_DECRYPT_ONLY 49
#define PIDX_CIPHER_PARAM_FIPS_APPROVED_INDICATOR PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR
#define PIDX_CIPHER_PARAM_FIPS_ENCRYPT_CHECK 50
#define PIDX_CIPHER_PARAM_HAS_RAND_KEY 51
#define PIDX_CIPHER_PARAM_IV 52
#define PIDX_CIPHER_PARAM_IVLEN 53
#define PIDX_CIPHER_PARAM_KEYLEN 54
#define PIDX_CIPHER_PARAM_MODE 55
#define PIDX_CIPHER_PARAM_NUM 56
#define PIDX_CIPHER_PARAM_PADDING 57
#define PIDX_CIPHER_PARAM_PIPELINE_AEAD_TAG 58
#define PIDX_CIPHER_PARAM_RANDOM_KEY 59
#define PIDX_CIPHER_PARAM_RC2_KEYBITS 60
#define PIDX_CIPHER_PARAM_ROUNDS 61
#define PIDX_CIPHER_PARAM_SPEED 62
#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK 63
#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD 64
#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN 65
#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC 66
#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN 67
#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN 68
#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE 69
#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE 70
#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT 71
#define PIDX_CIPHER_PARAM_TLS_MAC 72
#define PIDX_CIPHER_PARAM_TLS_MAC_SIZE 73
#define PIDX_CIPHER_PARAM_TLS_VERSION 74
#define PIDX_CIPHER_PARAM_UPDATED_IV 75
#define PIDX_CIPHER_PARAM_USE_BITS 76
#define PIDX_CIPHER_PARAM_XTS_STANDARD 77
#define PIDX_DECODER_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES
#define PIDX_DIGEST_PARAM_ALGID_ABSENT 78
#define PIDX_DIGEST_PARAM_BLOCK_SIZE 45
#define PIDX_DIGEST_PARAM_MICALG 79
#define PIDX_DIGEST_PARAM_PAD_TYPE 80
#define PIDX_DIGEST_PARAM_SIZE 81
#define PIDX_DIGEST_PARAM_SSL3_MS 82
#define PIDX_DIGEST_PARAM_XOF 83
#define PIDX_DIGEST_PARAM_XOFLEN 84
#define PIDX_DRBG_PARAM_CIPHER PIDX_ALG_PARAM_CIPHER
#define PIDX_DRBG_PARAM_DIGEST PIDX_ALG_PARAM_DIGEST
#define PIDX_DRBG_PARAM_ENTROPY_REQUIRED 85
#define PIDX_DRBG_PARAM_FIPS_APPROVED_INDICATOR PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR
#define PIDX_DRBG_PARAM_FIPS_DIGEST_CHECK PIDX_PKEY_PARAM_FIPS_DIGEST_CHECK
#define PIDX_DRBG_PARAM_MAC PIDX_ALG_PARAM_MAC
#define PIDX_DRBG_PARAM_MAX_ADINLEN 86
#define PIDX_DRBG_PARAM_MAX_ENTROPYLEN 87
#define PIDX_DRBG_PARAM_MAX_LENGTH 88
#define PIDX_DRBG_PARAM_MAX_NONCELEN 89
#define PIDX_DRBG_PARAM_MAX_PERSLEN 90
#define PIDX_DRBG_PARAM_MIN_ENTROPYLEN 91
#define PIDX_DRBG_PARAM_MIN_LENGTH 92
#define PIDX_DRBG_PARAM_MIN_NONCELEN 93
#define PIDX_DRBG_PARAM_PREDICTION_RESISTANCE 94
#define PIDX_DRBG_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES
#define PIDX_DRBG_PARAM_RANDOM_DATA 95
#define PIDX_DRBG_PARAM_RESEED_COUNTER 96
#define PIDX_DRBG_PARAM_RESEED_REQUESTS 97
#define PIDX_DRBG_PARAM_RESEED_TIME 98
#define PIDX_DRBG_PARAM_RESEED_TIME_INTERVAL 99
#define PIDX_DRBG_PARAM_SIZE 81
#define PIDX_DRBG_PARAM_USE_DF 100
#define PIDX_ENCODER_PARAM_CIPHER PIDX_ALG_PARAM_CIPHER
#define PIDX_ENCODER_PARAM_ENCRYPT_LEVEL 101
#define PIDX_ENCODER_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES
#define PIDX_ENCODER_PARAM_SAVE_PARAMETERS 102
#define PIDX_EXCHANGE_PARAM_EC_ECDH_COFACTOR_MODE 103
#define PIDX_EXCHANGE_PARAM_FIPS_APPROVED_INDICATOR PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR
#define PIDX_EXCHANGE_PARAM_FIPS_DIGEST_CHECK PIDX_PKEY_PARAM_FIPS_DIGEST_CHECK
#define PIDX_EXCHANGE_PARAM_FIPS_ECDH_COFACTOR_CHECK PIDX_PROV_PARAM_ECDH_COFACTOR_CHECK
#define PIDX_EXCHANGE_PARAM_FIPS_KEY_CHECK PIDX_PKEY_PARAM_FIPS_KEY_CHECK
#define PIDX_EXCHANGE_PARAM_KDF_DIGEST 104
#define PIDX_EXCHANGE_PARAM_KDF_DIGEST_PROPS 105
#define PIDX_EXCHANGE_PARAM_KDF_OUTLEN 106
#define PIDX_EXCHANGE_PARAM_KDF_TYPE 107
#define PIDX_EXCHANGE_PARAM_KDF_UKM 108
#define PIDX_EXCHANGE_PARAM_PAD 109
#define PIDX_GEN_PARAM_ITERATION 110
#define PIDX_GEN_PARAM_POTENTIAL 111
#define PIDX_KDF_PARAM_ARGON2_AD 112
#define PIDX_KDF_PARAM_ARGON2_LANES 113
#define PIDX_KDF_PARAM_ARGON2_MEMCOST 114
#define PIDX_KDF_PARAM_ARGON2_VERSION 115
#define PIDX_KDF_PARAM_CEK_ALG 116
#define PIDX_KDF_PARAM_CIPHER PIDX_ALG_PARAM_CIPHER
#define PIDX_KDF_PARAM_CONSTANT 117
#define PIDX_KDF_PARAM_DATA 118
#define PIDX_KDF_PARAM_DIGEST PIDX_ALG_PARAM_DIGEST
#define PIDX_KDF_PARAM_EARLY_CLEAN 119
#define PIDX_KDF_PARAM_FIPS_APPROVED_INDICATOR PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR
#define PIDX_KDF_PARAM_FIPS_DIGEST_CHECK PIDX_PKEY_PARAM_FIPS_DIGEST_CHECK
#define PIDX_KDF_PARAM_FIPS_EMS_CHECK 120
#define PIDX_KDF_PARAM_FIPS_KEY_CHECK PIDX_PKEY_PARAM_FIPS_KEY_CHECK
#define PIDX_KDF_PARAM_HMACDRBG_ENTROPY 121
#define PIDX_KDF_PARAM_HMACDRBG_NONCE 122
#define PIDX_KDF_PARAM_INFO 123
#define PIDX_KDF_PARAM_ITER 124
#define PIDX_KDF_PARAM_KBKDF_R 125
#define PIDX_KDF_PARAM_KBKDF_USE_L 126
#define PIDX_KDF_PARAM_KBKDF_USE_SEPARATOR 127
#define PIDX_KDF_PARAM_KEY 128
#define PIDX_KDF_PARAM_LABEL 129
#define PIDX_KDF_PARAM_MAC PIDX_ALG_PARAM_MAC
#define PIDX_KDF_PARAM_MAC_SIZE 130
#define PIDX_KDF_PARAM_MODE 55
#define PIDX_KDF_PARAM_PASSWORD 131
#define PIDX_KDF_PARAM_PKCS12_ID 132
#define PIDX_KDF_PARAM_PKCS5 133
#define PIDX_KDF_PARAM_PREFIX 134
#define PIDX_KDF_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES
#define PIDX_KDF_PARAM_SALT 135
#define PIDX_KDF_PARAM_SCRYPT_MAXMEM 136
#define PIDX_KDF_PARAM_SCRYPT_N 137
#define PIDX_KDF_PARAM_SCRYPT_P 138
#define PIDX_KDF_PARAM_SCRYPT_R 125
#define PIDX_KDF_PARAM_SECRET 139
#define PIDX_KDF_PARAM_SEED 140
#define PIDX_KDF_PARAM_SIZE 81
#define PIDX_KDF_PARAM_SSHKDF_SESSION_ID 141
#define PIDX_KDF_PARAM_SSHKDF_TYPE 142
#define PIDX_KDF_PARAM_SSHKDF_XCGHASH 143
#define PIDX_KDF_PARAM_THREADS 144
#define PIDX_KDF_PARAM_UKM 145
#define PIDX_KDF_PARAM_X942_ACVPINFO 146
#define PIDX_KDF_PARAM_X942_PARTYUINFO 147
#define PIDX_KDF_PARAM_X942_PARTYVINFO 148
#define PIDX_KDF_PARAM_X942_SUPP_PRIVINFO 149
#define PIDX_KDF_PARAM_X942_SUPP_PUBINFO 150
#define PIDX_KDF_PARAM_X942_USE_KEYBITS 151
#define PIDX_KEM_PARAM_FIPS_APPROVED_INDICATOR PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR
#define PIDX_KEM_PARAM_FIPS_KEY_CHECK PIDX_PKEY_PARAM_FIPS_KEY_CHECK
#define PIDX_KEM_PARAM_IKME 152
#define PIDX_KEM_PARAM_OPERATION 153
#define PIDX_LIBSSL_RECORD_LAYER_PARAM_BLOCK_PADDING 154
#define PIDX_LIBSSL_RECORD_LAYER_PARAM_HS_PADDING 155
#define PIDX_LIBSSL_RECORD_LAYER_PARAM_MAX_EARLY_DATA 156
#define PIDX_LIBSSL_RECORD_LAYER_PARAM_MAX_FRAG_LEN 157
#define PIDX_LIBSSL_RECORD_LAYER_PARAM_MODE 55
#define PIDX_LIBSSL_RECORD_LAYER_PARAM_OPTIONS 158
#define PIDX_LIBSSL_RECORD_LAYER_PARAM_READ_AHEAD 159
#define PIDX_LIBSSL_RECORD_LAYER_PARAM_STREAM_MAC 160
#define PIDX_LIBSSL_RECORD_LAYER_PARAM_TLSTREE 161
#define PIDX_LIBSSL_RECORD_LAYER_PARAM_USE_ETM 162
#define PIDX_LIBSSL_RECORD_LAYER_READ_BUFFER_LEN 163
#define PIDX_MAC_PARAM_BLOCK_SIZE 164
#define PIDX_MAC_PARAM_CIPHER PIDX_ALG_PARAM_CIPHER
#define PIDX_MAC_PARAM_CUSTOM 165
#define PIDX_MAC_PARAM_C_ROUNDS 166
#define PIDX_MAC_PARAM_DIGEST PIDX_ALG_PARAM_DIGEST
#define PIDX_MAC_PARAM_DIGEST_NOINIT 167
#define PIDX_MAC_PARAM_DIGEST_ONESHOT 168
#define PIDX_MAC_PARAM_D_ROUNDS 169
#define PIDX_MAC_PARAM_FIPS_APPROVED_INDICATOR PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR
#define PIDX_MAC_PARAM_FIPS_KEY_CHECK PIDX_PKEY_PARAM_FIPS_KEY_CHECK
#define PIDX_MAC_PARAM_FIPS_NO_SHORT_MAC PIDX_PROV_PARAM_NO_SHORT_MAC
#define PIDX_MAC_PARAM_IV 52
#define PIDX_MAC_PARAM_KEY 128
#define PIDX_MAC_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES
#define PIDX_MAC_PARAM_SALT 135
#define PIDX_MAC_PARAM_SIZE 81
#define PIDX_MAC_PARAM_TLS_DATA_SIZE 170
#define PIDX_MAC_PARAM_XOF 83
#define PIDX_OBJECT_PARAM_DATA 118
#define PIDX_OBJECT_PARAM_DATA_STRUCTURE 171
#define PIDX_OBJECT_PARAM_DATA_TYPE 172
#define PIDX_OBJECT_PARAM_DESC 173
#define PIDX_OBJECT_PARAM_INPUT_TYPE 174
#define PIDX_OBJECT_PARAM_REFERENCE 175
#define PIDX_OBJECT_PARAM_TYPE 142
#define PIDX_PASSPHRASE_PARAM_INFO 123
#define PIDX_PKEY_PARAM_ALGORITHM_ID PIDX_ALG_PARAM_ALGORITHM_ID
#define PIDX_PKEY_PARAM_ALGORITHM_ID_PARAMS PIDX_ALG_PARAM_ALGORITHM_ID_PARAMS
#define PIDX_PKEY_PARAM_BITS 176
#define PIDX_PKEY_PARAM_CIPHER PIDX_ALG_PARAM_CIPHER
#define PIDX_PKEY_PARAM_DEFAULT_DIGEST 177
#define PIDX_PKEY_PARAM_DHKEM_IKM 178
#define PIDX_PKEY_PARAM_DH_GENERATOR 179
#define PIDX_PKEY_PARAM_DH_PRIV_LEN 180
#define PIDX_PKEY_PARAM_DIGEST PIDX_ALG_PARAM_DIGEST
#define PIDX_PKEY_PARAM_DIGEST_SIZE 181
#define PIDX_PKEY_PARAM_DIST_ID 182
#define PIDX_PKEY_PARAM_EC_A 183
#define PIDX_PKEY_PARAM_EC_B 184
#define PIDX_PKEY_PARAM_EC_CHAR2_M 185
#define PIDX_PKEY_PARAM_EC_CHAR2_PP_K1 186
#define PIDX_PKEY_PARAM_EC_CHAR2_PP_K2 187
#define PIDX_PKEY_PARAM_EC_CHAR2_PP_K3 188
#define PIDX_PKEY_PARAM_EC_CHAR2_TP_BASIS 189
#define PIDX_PKEY_PARAM_EC_CHAR2_TYPE 190
#define PIDX_PKEY_PARAM_EC_COFACTOR 191
#define PIDX_PKEY_PARAM_EC_DECODED_FROM_EXPLICIT_PARAMS 192
#define PIDX_PKEY_PARAM_EC_ENCODING 193
#define PIDX_PKEY_PARAM_EC_FIELD_TYPE 194
#define PIDX_PKEY_PARAM_EC_GENERATOR 195
#define PIDX_PKEY_PARAM_EC_GROUP_CHECK_TYPE 196
#define PIDX_PKEY_PARAM_EC_INCLUDE_PUBLIC 197
#define PIDX_PKEY_PARAM_EC_ORDER 198
#define PIDX_PKEY_PARAM_EC_P 138
#define PIDX_PKEY_PARAM_EC_POINT_CONVERSION_FORMAT 199
#define PIDX_PKEY_PARAM_EC_PUB_X 200
#define PIDX_PKEY_PARAM_EC_PUB_Y 201
#define PIDX_PKEY_PARAM_EC_SEED 140
#define PIDX_PKEY_PARAM_ENCODED_PUBLIC_KEY 202
#define PIDX_PKEY_PARAM_ENGINE PIDX_ALG_PARAM_ENGINE
#define PIDX_PKEY_PARAM_FFC_COFACTOR 203
#define PIDX_PKEY_PARAM_FFC_DIGEST PIDX_PKEY_PARAM_DIGEST
#define PIDX_PKEY_PARAM_FFC_DIGEST_PROPS PIDX_PKEY_PARAM_PROPERTIES
#define PIDX_PKEY_PARAM_FFC_G 204
#define PIDX_PKEY_PARAM_FFC_GINDEX 205
#define PIDX_PKEY_PARAM_FFC_H 206
#define PIDX_PKEY_PARAM_FFC_P 138
#define PIDX_PKEY_PARAM_FFC_PBITS 207
#define PIDX_PKEY_PARAM_FFC_PCOUNTER 208
#define PIDX_PKEY_PARAM_FFC_Q 209
#define PIDX_PKEY_PARAM_FFC_QBITS 210
#define PIDX_PKEY_PARAM_FFC_SEED 140
#define PIDX_PKEY_PARAM_FFC_TYPE 142
#define PIDX_PKEY_PARAM_FFC_VALIDATE_G 211
#define PIDX_PKEY_PARAM_FFC_VALIDATE_LEGACY 212
#define PIDX_PKEY_PARAM_FFC_VALIDATE_PQ 213
#define PIDX_PKEY_PARAM_FIPS_APPROVED_INDICATOR PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR
#define PIDX_PKEY_PARAM_FIPS_DIGEST_CHECK 214
#define PIDX_PKEY_PARAM_FIPS_KEY_CHECK 215
#define PIDX_PKEY_PARAM_FIPS_SIGN_CHECK 216
#define PIDX_PKEY_PARAM_GROUP_NAME 217
#define PIDX_PKEY_PARAM_IMPLICIT_REJECTION 8
#define PIDX_PKEY_PARAM_MANDATORY_DIGEST 218
#define PIDX_PKEY_PARAM_MASKGENFUNC 219
#define PIDX_PKEY_PARAM_MAX_SIZE 220
#define PIDX_PKEY_PARAM_MGF1_DIGEST 221
#define PIDX_PKEY_PARAM_MGF1_PROPERTIES 222
#define PIDX_PKEY_PARAM_ML_DSA_INPUT_FORMATS 223
#define PIDX_PKEY_PARAM_ML_DSA_OUTPUT_FORMATS 224
#define PIDX_PKEY_PARAM_ML_DSA_PREFER_SEED 225
#define PIDX_PKEY_PARAM_ML_DSA_RETAIN_SEED 226
#define PIDX_PKEY_PARAM_ML_DSA_SEED 140
#define PIDX_PKEY_PARAM_ML_KEM_IMPORT_PCT_TYPE 227
#define PIDX_PKEY_PARAM_ML_KEM_INPUT_FORMATS 228
#define PIDX_PKEY_PARAM_ML_KEM_OUTPUT_FORMATS 229
#define PIDX_PKEY_PARAM_ML_KEM_PREFER_SEED 230
#define PIDX_PKEY_PARAM_ML_KEM_RETAIN_SEED 231
#define PIDX_PKEY_PARAM_ML_KEM_SEED 140
#define PIDX_PKEY_PARAM_PAD_MODE 232
#define PIDX_PKEY_PARAM_PRIV_KEY 233
#define PIDX_PKEY_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES
#define PIDX_PKEY_PARAM_PUB_KEY 234
#define PIDX_PKEY_PARAM_RSA_BITS PIDX_PKEY_PARAM_BITS
#define PIDX_PKEY_PARAM_RSA_COEFFICIENT 235
#define PIDX_PKEY_PARAM_RSA_COEFFICIENT1 236
#define PIDX_PKEY_PARAM_RSA_COEFFICIENT2 237
#define PIDX_PKEY_PARAM_RSA_COEFFICIENT3 238
#define PIDX_PKEY_PARAM_RSA_COEFFICIENT4 239
#define PIDX_PKEY_PARAM_RSA_COEFFICIENT5 240
#define PIDX_PKEY_PARAM_RSA_COEFFICIENT6 241
#define PIDX_PKEY_PARAM_RSA_COEFFICIENT7 242
#define PIDX_PKEY_PARAM_RSA_COEFFICIENT8 243
#define PIDX_PKEY_PARAM_RSA_COEFFICIENT9 244
#define PIDX_PKEY_PARAM_RSA_D 245
#define PIDX_PKEY_PARAM_RSA_DERIVE_FROM_PQ 246
#define PIDX_PKEY_PARAM_RSA_DIGEST PIDX_PKEY_PARAM_DIGEST
#define PIDX_PKEY_PARAM_RSA_DIGEST_PROPS PIDX_PKEY_PARAM_PROPERTIES
#define PIDX_PKEY_PARAM_RSA_E 247
#define PIDX_PKEY_PARAM_RSA_EXPONENT 248
#define PIDX_PKEY_PARAM_RSA_EXPONENT1 249
#define PIDX_PKEY_PARAM_RSA_EXPONENT10 250
#define PIDX_PKEY_PARAM_RSA_EXPONENT2 251
#define PIDX_PKEY_PARAM_RSA_EXPONENT3 252
#define PIDX_PKEY_PARAM_RSA_EXPONENT4 253
#define PIDX_PKEY_PARAM_RSA_EXPONENT5 254
#define PIDX_PKEY_PARAM_RSA_EXPONENT6 255
#define PIDX_PKEY_PARAM_RSA_EXPONENT7 256
#define PIDX_PKEY_PARAM_RSA_EXPONENT8 257
#define PIDX_PKEY_PARAM_RSA_EXPONENT9 258
#define PIDX_PKEY_PARAM_RSA_FACTOR 259
#define PIDX_PKEY_PARAM_RSA_FACTOR1 260
#define PIDX_PKEY_PARAM_RSA_FACTOR10 261
#define PIDX_PKEY_PARAM_RSA_FACTOR2 262
#define PIDX_PKEY_PARAM_RSA_FACTOR3 263
#define PIDX_PKEY_PARAM_RSA_FACTOR4 264
#define PIDX_PKEY_PARAM_RSA_FACTOR5 265
#define PIDX_PKEY_PARAM_RSA_FACTOR6 266
#define PIDX_PKEY_PARAM_RSA_FACTOR7 267
#define PIDX_PKEY_PARAM_RSA_FACTOR8 268
#define PIDX_PKEY_PARAM_RSA_FACTOR9 269
#define PIDX_PKEY_PARAM_RSA_MASKGENFUNC PIDX_PKEY_PARAM_MASKGENFUNC
#define PIDX_PKEY_PARAM_RSA_MGF1_DIGEST PIDX_PKEY_PARAM_MGF1_DIGEST
#define PIDX_PKEY_PARAM_RSA_N 137
#define PIDX_PKEY_PARAM_RSA_PRIMES 270
#define PIDX_PKEY_PARAM_RSA_PSS_SALTLEN 271
#define PIDX_PKEY_PARAM_RSA_TEST_P1 272
#define PIDX_PKEY_PARAM_RSA_TEST_P2 273
#define PIDX_PKEY_PARAM_RSA_TEST_Q1 274
#define PIDX_PKEY_PARAM_RSA_TEST_Q2 275
#define PIDX_PKEY_PARAM_RSA_TEST_XP 276
#define PIDX_PKEY_PARAM_RSA_TEST_XP1 277
#define PIDX_PKEY_PARAM_RSA_TEST_XP2 278
#define PIDX_PKEY_PARAM_RSA_TEST_XQ 279
#define PIDX_PKEY_PARAM_RSA_TEST_XQ1 280
#define PIDX_PKEY_PARAM_RSA_TEST_XQ2 281
#define PIDX_PKEY_PARAM_SECURITY_BITS 282
#define PIDX_PKEY_PARAM_SLH_DSA_SEED 140
#define PIDX_PKEY_PARAM_USE_COFACTOR_ECDH PIDX_PKEY_PARAM_USE_COFACTOR_FLAG
#define PIDX_PKEY_PARAM_USE_COFACTOR_FLAG 283
#define PIDX_PROV_PARAM_BUILDINFO 284
#define PIDX_PROV_PARAM_CORE_MODULE_FILENAME 285
#define PIDX_PROV_PARAM_CORE_PROV_NAME 286
#define PIDX_PROV_PARAM_CORE_VERSION 287
#define PIDX_PROV_PARAM_DRBG_TRUNC_DIGEST 288
#define PIDX_PROV_PARAM_DSA_SIGN_DISABLED 289
#define PIDX_PROV_PARAM_ECDH_COFACTOR_CHECK 290
#define PIDX_PROV_PARAM_HKDF_DIGEST_CHECK 291
#define PIDX_PROV_PARAM_HKDF_KEY_CHECK 292
#define PIDX_PROV_PARAM_HMAC_KEY_CHECK 293
#define PIDX_PROV_PARAM_KBKDF_KEY_CHECK 294
#define PIDX_PROV_PARAM_KMAC_KEY_CHECK 295
#define PIDX_PROV_PARAM_NAME 296
#define PIDX_PROV_PARAM_NO_SHORT_MAC 297
#define PIDX_PROV_PARAM_PBKDF2_LOWER_BOUND_CHECK 298
#define PIDX_PROV_PARAM_RSA_PKCS15_PAD_DISABLED 299
#define PIDX_PROV_PARAM_RSA_PSS_SALTLEN_CHECK 300
#define PIDX_PROV_PARAM_RSA_SIGN_X931_PAD_DISABLED 301
#define PIDX_PROV_PARAM_SECURITY_CHECKS 302
#define PIDX_PROV_PARAM_SELF_TEST_DESC 303
#define PIDX_PROV_PARAM_SELF_TEST_PHASE 304
#define PIDX_PROV_PARAM_SELF_TEST_TYPE 305
#define PIDX_PROV_PARAM_SIGNATURE_DIGEST_CHECK 306
#define PIDX_PROV_PARAM_SSHKDF_DIGEST_CHECK 307
#define PIDX_PROV_PARAM_SSHKDF_KEY_CHECK 308
#define PIDX_PROV_PARAM_SSKDF_DIGEST_CHECK 309
#define PIDX_PROV_PARAM_SSKDF_KEY_CHECK 310
#define PIDX_PROV_PARAM_STATUS 311
#define PIDX_PROV_PARAM_TDES_ENCRYPT_DISABLED 312
#define PIDX_PROV_PARAM_TLS13_KDF_DIGEST_CHECK 313
#define PIDX_PROV_PARAM_TLS13_KDF_KEY_CHECK 314
#define PIDX_PROV_PARAM_TLS1_PRF_DIGEST_CHECK 315
#define PIDX_PROV_PARAM_TLS1_PRF_EMS_CHECK 316
#define PIDX_PROV_PARAM_TLS1_PRF_KEY_CHECK 317
#define PIDX_PROV_PARAM_VERSION 115
#define PIDX_PROV_PARAM_X942KDF_KEY_CHECK 318
#define PIDX_PROV_PARAM_X963KDF_DIGEST_CHECK 319
#define PIDX_PROV_PARAM_X963KDF_KEY_CHECK 320
#define PIDX_RAND_PARAM_FIPS_APPROVED_INDICATOR PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR
#define PIDX_RAND_PARAM_GENERATE 321
#define PIDX_RAND_PARAM_MAX_REQUEST 322
#define PIDX_RAND_PARAM_STATE 323
#define PIDX_RAND_PARAM_STRENGTH 324
#define PIDX_RAND_PARAM_TEST_ENTROPY 325
#define PIDX_RAND_PARAM_TEST_NONCE 326
#define PIDX_SIGNATURE_PARAM_ADD_RANDOM 327
#define PIDX_SIGNATURE_PARAM_ALGORITHM_ID PIDX_PKEY_PARAM_ALGORITHM_ID
#define PIDX_SIGNATURE_PARAM_ALGORITHM_ID_PARAMS PIDX_PKEY_PARAM_ALGORITHM_ID_PARAMS
#define PIDX_SIGNATURE_PARAM_CONTEXT_STRING 328
#define PIDX_SIGNATURE_PARAM_DETERMINISTIC 329
#define PIDX_SIGNATURE_PARAM_DIGEST PIDX_PKEY_PARAM_DIGEST
#define PIDX_SIGNATURE_PARAM_DIGEST_SIZE PIDX_PKEY_PARAM_DIGEST_SIZE
#define PIDX_SIGNATURE_PARAM_FIPS_APPROVED_INDICATOR PIDX_ALG_PARAM_FIPS_APPROVED_INDICATOR
#define PIDX_SIGNATURE_PARAM_FIPS_DIGEST_CHECK PIDX_PKEY_PARAM_FIPS_DIGEST_CHECK
#define PIDX_SIGNATURE_PARAM_FIPS_KEY_CHECK PIDX_PKEY_PARAM_FIPS_KEY_CHECK
#define PIDX_SIGNATURE_PARAM_FIPS_RSA_PSS_SALTLEN_CHECK 300
#define PIDX_SIGNATURE_PARAM_FIPS_SIGN_CHECK PIDX_PKEY_PARAM_FIPS_SIGN_CHECK
#define PIDX_SIGNATURE_PARAM_FIPS_SIGN_X931_PAD_CHECK 330
#define PIDX_SIGNATURE_PARAM_FIPS_VERIFY_MESSAGE 331
#define PIDX_SIGNATURE_PARAM_INSTANCE 332
#define PIDX_SIGNATURE_PARAM_KAT 333
#define PIDX_SIGNATURE_PARAM_MESSAGE_ENCODING 334
#define PIDX_SIGNATURE_PARAM_MGF1_DIGEST PIDX_PKEY_PARAM_MGF1_DIGEST
#define PIDX_SIGNATURE_PARAM_MGF1_PROPERTIES PIDX_PKEY_PARAM_MGF1_PROPERTIES
#define PIDX_SIGNATURE_PARAM_MU 335
#define PIDX_SIGNATURE_PARAM_NONCE_TYPE 336
#define PIDX_SIGNATURE_PARAM_PAD_MODE PIDX_PKEY_PARAM_PAD_MODE
#define PIDX_SIGNATURE_PARAM_PROPERTIES PIDX_PKEY_PARAM_PROPERTIES
#define PIDX_SIGNATURE_PARAM_PSS_SALTLEN 271
#define PIDX_SIGNATURE_PARAM_SIGNATURE 337
#define PIDX_SIGNATURE_PARAM_TEST_ENTROPY 338
#define PIDX_SKEY_PARAM_KEY_LENGTH 339
#define PIDX_SKEY_PARAM_RAW_BYTES 340
#define PIDX_STORE_PARAM_ALIAS 341
#define PIDX_STORE_PARAM_DIGEST 3
#define PIDX_STORE_PARAM_EXPECT 342
#define PIDX_STORE_PARAM_FINGERPRINT 343
#define PIDX_STORE_PARAM_INPUT_TYPE 174
#define PIDX_STORE_PARAM_ISSUER 296
#define PIDX_STORE_PARAM_PROPERTIES 7
#define PIDX_STORE_PARAM_SERIAL 344
#define PIDX_STORE_PARAM_SUBJECT 345
/* clang-format on */
Loaded 100 of 223 files, more files were not shown because too many files have changed in this diff. Show more