Merge pull request #4 from guanzhi/master

update from master
This commit is contained in:
Gorachya
2019-03-13 14:40:42 +08:00
committed by GitHub
60 changed files with 10585 additions and 5458 deletions

View File

@@ -632,7 +632,7 @@ install_man_docs:
@\
OUTSUFFIX='.$${SEC}$(MANSUFFIX)'; \
OUTTOP="$(DESTDIR)$(MANDIR)"; \
GENERATE='pod2man --name=$$NAME --section=$$SEC --center=OpenSSL --release=$(VERSION)'; \
GENERATE='pod2man --name=$$NAME --section=$$SEC --center=GmSSL --release=$(VERSION)'; \
$(PROCESS_PODS)
uninstall_man_docs:

View File

@@ -314,7 +314,7 @@ $config{sdirs} = [
"cms", "ts", "srp", "cmac", "ct", "async", "kdf",
"sm3", "base58", "sms4", "zuc", "serpent", "speck", "kdf2", "ffx", "otp",
"ecies", "sm2", "cpk", "paillier", "ec2", "sm9", "bfibe", "bb1ibe",
"gmapi", "skf", "sdf", "saf", "sof",
"gmapi", "skf", "sdf", "saf", "sof", "ecrs"
];
# Known TLS and DTLS protocols
@@ -417,6 +417,7 @@ my @disablables = (
"ecies",
"ffx",
"sm2",
"ecrs",
"paillier",
"cpk",
"otp",
@@ -503,6 +504,7 @@ my @disable_cascades = (
"dtls" => [ @dtls ],
"sm3" => [ "sm2" ],
"sdf" => [ "saf" ],
"saf" => [ "sof" ],
# SSL 3.0, (D)TLS 1.0 and TLS 1.1 require MD5 and SHA

View File

@@ -69,6 +69,7 @@ NON_EMPTY_TRANSLATION_UNIT
# include <openssl/pem.h>
# include <openssl/sm2.h>
# include <openssl/objects.h>
# include "../crypto/ec/ec_lcl.h"
# include "apps.h"
static OPT_PAIR conv_forms[] = {
@@ -129,7 +130,7 @@ int sm2_main(int argc, char **argv)
ENGINE *e = NULL;
EC_KEY *eckey = NULL;
const EC_GROUP *group;
const EVP_CIPHER *enc = NULL;
const EVP_CIPHER *enc = EVP_sms4_cbc();
point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED;
char *infile = NULL, *outfile = NULL, *prog;
char *passin = NULL, *passout = NULL, *passinarg = NULL, *passoutarg = NULL;
@@ -292,6 +293,10 @@ int sm2_main(int argc, char **argv)
unsigned char buf[256] = {0};
unsigned char *key = NULL;
long keylen;
if (!(eckey = EC_KEY_new_by_curve_name(NID_sm2p256v1))) {
ERR_print_errors(bio_err);
goto end;
}
if (BIO_read(in, buf, sizeof(buf) - 1) <= 0) {
ERR_print_errors(bio_err);
OPENSSL_cleanse(buf, sizeof(buf));
@@ -304,16 +309,25 @@ int sm2_main(int argc, char **argv)
}
OPENSSL_cleanse(buf, sizeof(buf));
if (keylen != 32) {
BIO_printf(bio_err, "invalid private key in hex format\n");
BIO_printf(bio_err, "Invalid private key in hex format\n");
BIO_printf(bio_err, "Key length is %ld, not 32 byte\n", keylen);
OPENSSL_cleanse(key, keylen);
goto end;
}
if (!EC_KEY_oct2key(eckey, key, sizeof(key), NULL)) {
if (!EC_KEY_oct2priv(eckey, key, keylen)) {
ERR_print_errors(bio_err);
OPENSSL_cleanse(key, keylen);
goto end;
}
OPENSSL_cleanse(key, keylen);
if (eckey->group->meth->keygenpub == NULL
|| eckey->group->meth->keygenpub(eckey) == 0) {
BIO_printf(bio_err, "Generate public key from private key failed\n");
ERR_print_errors(bio_err);
goto end;
}
} else if (informat == FORMAT_ENGINE) {
EVP_PKEY *pkey;
if (pubin)
@@ -378,6 +392,24 @@ int sm2_main(int argc, char **argv)
}
}
if (genzid) {
unsigned char z[64];
size_t zlen = sizeof(z);
if (!id) {
id = SM2_DEFAULT_ID;
BIO_printf(bio_err, "use default identity '%s'\n", id);
}
if (!SM2_compute_id_digest(EVP_sm3(), id, strlen(id), z, &zlen, eckey)) {
goto end;
}
BIO_printf(out, "id: %s\n", id);
BIO_puts(out, "Z:\n");
ASN1_buf_print(out, z, zlen, 4);
BIO_printf(out, "\n");
}
if (noout) {
ret = 0;
goto end;
@@ -400,26 +432,12 @@ int sm2_main(int argc, char **argv)
i = PEM_write_bio_EC_PUBKEY(out, eckey);
else {
assert(private);
//FIXME: use PKCS#8
i = PEM_write_bio_ECPrivateKey(out, eckey, enc,
NULL, 0, NULL, passout);
}
}
if (genzid) {
unsigned char z[64];
size_t zlen = sizeof(z);
if (!id) {
id = SM2_DEFAULT_ID;
BIO_printf(bio_err, "use default identity '%s'\n", id);
}
if (!SM2_compute_id_digest(EVP_sm3(), id, strlen(id), z, &zlen, eckey)) {
goto end;
}
BIO_printf(out, "Z = ");
for (i = 0; i < zlen; i++) {
BIO_printf(out, "%02X", z[i]);
}
BIO_printf(out, "\n");
}
if (!i) {
BIO_printf(bio_err, "unable to write private key\n");

View File

@@ -288,6 +288,17 @@ opthelp:
goto end;
}
switch (op) {
case OP_DGST:
case OP_SIGN:
case OP_VERIFY:
if (!id) {
BIO_printf(bio_err, "Option '-id' required\n");
goto end;
}
break;
}
switch (op) {
case OP_DGST:
return sm2utl_sign(md, in, out, id, e, ec_key, 0);
@@ -330,7 +341,7 @@ static int sm2utl_sign(const EVP_MD *md, BIO *in, BIO *out, const char *id,
ERR_print_errors(bio_err);
goto end;
}
while ((len = BIO_read(in, buf, sizeof(buf))) <= 0) {
while ((len = BIO_read(in, buf, sizeof(buf))) > 0) {
if (!EVP_DigestUpdate(md_ctx, buf, len)) {
ERR_print_errors(bio_err);
goto end;
@@ -386,7 +397,7 @@ static int sm2utl_verify(const EVP_MD *md, BIO *in, BIO *out, BIO *sig,
ERR_print_errors(bio_err);
goto end;
}
while ((len = BIO_read(in, buf, sizeof(buf))) <= 0) {
while ((len = BIO_read(in, buf, sizeof(buf))) > 0) {
if (!EVP_DigestUpdate(md_ctx, buf, len)) {
ERR_print_errors(bio_err);
goto end;
@@ -420,6 +431,9 @@ static int sm2utl_encrypt(const EVP_MD *md, BIO *in, BIO *out, EC_KEY *ec_key)
int len;
if (!(len = bio_to_mem(&buf, SM2_MAX_PLAINTEXT_LENGTH, in))) {
ERR_print_errors(bio_err);
BIO_printf(bio_err, "Error reading plaintext\n");
goto end;
}
if (!(cval = SM2_do_encrypt(md, buf, len, ec_key))
|| i2d_SM2CiphertextValue_bio(out, cval) <= 0) {

View File

@@ -6,7 +6,7 @@ SOURCE[../../libcrypto]=\
ecp_nistp224.c ecp_nistp256.c ecp_nistp521.c ecp_nistputil.c \
ecp_oct.c ec2_oct.c ec_oct.c ec_kmeth.c ecdh_ossl.c ecdh_kdf.c \
ecdsa_ossl.c ecdsa_sign.c ecdsa_vrf.c curve25519.c ecx_meth.c \
{- $target{ec_asm_src} -}
{- $target{ec_asm_src} -} ecahe.c
GENERATE[ecp_nistz256-x86.s]=asm/ecp_nistz256-x86.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR)

View File

@@ -1,3 +1,51 @@
/* ====================================================================
* Copyright (c) 2016 - 2019 The GmSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the GmSSL Project.
* (http://gmssl.org/)"
*
* 4. The name "GmSSL Project" must not be used to endorse or promote
* products derived from this software without prior written
* permission. For written permission, please contact
* guanzhi1980@gmail.com.
*
* 5. Products derived from this software may not be called "GmSSL"
* nor may "GmSSL" appear in their names without prior written
* permission of the GmSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the GmSSL Project
* (http://gmssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*/
/*
* Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved.
*
@@ -472,6 +520,19 @@ static int ec_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2)
X509_ALGOR_set0(alg2, OBJ_nid2obj(snid), V_ASN1_UNDEF, 0);
}
return 1;
#ifndef OPENSSL_NO_SM2
case ASN1_PKEY_CTRL_PKCS7_ENCRYPT:
if (arg1 == 0) {
X509_ALGOR *alg = NULL;
PKCS7_RECIP_INFO_get0_alg(arg2, &alg);
if (alg) {
X509_ALGOR_set0(alg, OBJ_nid2obj(NID_sm2encrypt_with_sm3), V_ASN1_NULL, 0);
}
}
return 1;
#endif
#ifndef OPENSSL_NO_CMS
case ASN1_PKEY_CTRL_CMS_SIGN:
if (arg1 == 0) {

View File

@@ -25,6 +25,9 @@ static ERR_STRING_DATA EC_str_functs[] = {
{ERR_FUNC(EC_F_D2I_ECPKPARAMETERS), "d2i_ECPKParameters"},
{ERR_FUNC(EC_F_D2I_ECPRIVATEKEY), "d2i_ECPrivateKey"},
{ERR_FUNC(EC_F_DO_EC_KEY_PRINT), "do_EC_KEY_print"},
{ERR_FUNC(EC_F_ECAHE_CIPHERTEXT_SIZE), "ECAHE_ciphertext_size"},
{ERR_FUNC(EC_F_ECAHE_DECRYPT), "ECAHE_decrypt"},
{ERR_FUNC(EC_F_ECAHE_ENCRYPT), "ECAHE_encrypt"},
{ERR_FUNC(EC_F_ECDH_CMS_DECRYPT), "ecdh_cms_decrypt"},
{ERR_FUNC(EC_F_ECDH_CMS_SET_SHARED_INFO), "ecdh_cms_set_shared_info"},
{ERR_FUNC(EC_F_ECDH_COMPUTE_KEY), "ECDH_compute_key"},
@@ -169,6 +172,7 @@ static ERR_STRING_DATA EC_str_functs[] = {
{ERR_FUNC(EC_F_EC_KEY_CHECK_KEY), "EC_KEY_check_key"},
{ERR_FUNC(EC_F_EC_KEY_COPY), "EC_KEY_copy"},
{ERR_FUNC(EC_F_EC_KEY_GENERATE_KEY), "EC_KEY_generate_key"},
{ERR_FUNC(EC_F_EC_KEY_MERGE), "EC_KEY_merge"},
{ERR_FUNC(EC_F_EC_KEY_NEW_METHOD), "EC_KEY_new_method"},
{ERR_FUNC(EC_F_EC_KEY_OCT2PRIV), "EC_KEY_oct2priv"},
{ERR_FUNC(EC_F_EC_KEY_PRINT_FP), "EC_KEY_print_fp"},
@@ -178,6 +182,7 @@ static ERR_STRING_DATA EC_str_functs[] = {
{ERR_FUNC(EC_F_EC_KEY_SIMPLE_CHECK_KEY), "ec_key_simple_check_key"},
{ERR_FUNC(EC_F_EC_KEY_SIMPLE_OCT2PRIV), "ec_key_simple_oct2priv"},
{ERR_FUNC(EC_F_EC_KEY_SIMPLE_PRIV2OCT), "ec_key_simple_priv2oct"},
{ERR_FUNC(EC_F_EC_KEY_SPLIT), "EC_KEY_split"},
{ERR_FUNC(EC_F_EC_POINTS_MAKE_AFFINE), "EC_POINTs_make_affine"},
{ERR_FUNC(EC_F_EC_POINT_ADD), "EC_POINT_add"},
{ERR_FUNC(EC_F_EC_POINT_CMP), "EC_POINT_cmp"},
@@ -329,6 +334,7 @@ static ERR_STRING_DATA EC_str_reasons[] = {
"invalid sm2 kap checksum length"},
{ERR_REASON(EC_R_INVALID_SM2_KAP_CHECKSUM_VALUE),
"invalid sm2 kap checksum value"},
{ERR_REASON(EC_R_INVALID_SPLIT_PARAMETER), "invalid split parameter"},
{ERR_REASON(EC_R_INVALID_TRINOMIAL_BASIS), "invalid trinomial basis"},
{ERR_REASON(EC_R_INVALID_TYPE1CURVE), "invalid type1curve"},
{ERR_REASON(EC_R_INVALID_TYPE1_CURVE), "invalid type1 curve"},

View File

@@ -250,6 +250,8 @@ int ec_key_simple_generate_key(EC_KEY *eckey)
int ec_key_simple_generate_public_key(EC_KEY *eckey)
{
if (eckey->pub_key == NULL)
eckey->pub_key = EC_POINT_new(eckey->group);
return EC_POINT_mul(eckey->group, eckey->pub_key, eckey->priv_key, NULL,
NULL, NULL);
}
@@ -637,3 +639,107 @@ int EC_KEY_can_sign(const EC_KEY *eckey)
return 0;
return 1;
}
#define EC_KEY_MIN_SHARES 2
#define EC_KEY_MAX_SHARES 5
STACK_OF(EC_KEY) *EC_KEY_split(EC_KEY *ec_key, int k, int n)
{
STACK_OF(EC_KEY) *ret = NULL;
STACK_OF(EC_KEY) *keys = NULL;
STACK_OF(BIGNUM) *as = NULL;
const BIGNUM *order;
const BIGNUM *d;
EC_KEY *key = NULL; /* for stack */
BIGNUM *a = NULL; /* for stack */
BIGNUM *fx = NULL;
BIGNUM *ax = NULL;
BN_CTX *bn_ctx = NULL;
int i, x, xpow;
if (!(d = EC_KEY_get0_private_key(ec_key))
|| !(order = EC_GROUP_get0_order(EC_KEY_get0_group(ec_key)))) {
ECerr(EC_F_EC_KEY_SPLIT, EC_R_INVALID_PRIVATE_KEY);
return NULL;
}
if (k < EC_KEY_MIN_SHARES || k > n || n > EC_KEY_MAX_SHARES) {
ECerr(EC_F_EC_KEY_SPLIT, EC_R_INVALID_SPLIT_PARAMETER);
return NULL;
}
if (!(keys = sk_EC_KEY_new_null())
|| !(as = sk_BIGNUM_new_null())
|| !(fx = BN_new())
|| !(ax = BN_new())
|| !(bn_ctx = BN_CTX_new())) {
ECerr(EC_F_EC_KEY_SPLIT, ERR_R_MALLOC_FAILURE);
goto end;
}
/* a_i = rand(1, order), i = 0 .. k-1 */
for (i = 0; i < k; i++) {
if (!(a = BN_new())) {
ECerr(EC_F_EC_KEY_SPLIT, ERR_R_MALLOC_FAILURE);
goto end;
}
do {
if (!BN_rand_range(a, order)) {
ECerr(EC_F_EC_KEY_SPLIT, ERR_R_BN_LIB);
goto end;
}
} while (BN_is_zero(a));
if (!sk_BIGNUM_push(as, a)) {
ECerr(EC_F_EC_KEY_SPLIT, ERR_R_BN_LIB);
goto end;
}
a = NULL;
}
/* f(x) = d + a_0 * x^1 + ... + a_{k-1} * x^k, x = 1 .. n */
for (x = 1; x <= n; x++) {
if (!(key = EC_KEY_dup(ec_key))
|| !BN_copy(fx, d)) {
ECerr(EC_F_EC_KEY_SPLIT, ERR_R_MALLOC_FAILURE);
goto end;
}
xpow = x;
for (i = 0; i < k; i++) {
if (!BN_copy(ax, sk_BIGNUM_value(as, i))
|| !BN_mul_word(ax, xpow)
|| !BN_mod_add(fx, fx, ax, order, bn_ctx)) {
ECerr(EC_F_EC_KEY_SPLIT, ERR_R_BN_LIB);
goto end;
}
xpow *= x;
}
if (!EC_KEY_set_private_key(key, fx)
|| !sk_EC_KEY_push(keys, key)) {
ECerr(EC_F_EC_KEY_SPLIT, ERR_R_EC_LIB);
goto end;
}
key = NULL;
}
ret = keys;
keys = NULL;
end:
sk_EC_KEY_free(keys);
sk_BIGNUM_free(as);
EC_KEY_free(key);
BN_free(a);
BN_free(fx);
BN_free(ax);
BN_CTX_free(bn_ctx);
return ret;
}
EC_KEY *EC_KEY_merge(STACK_OF(EC_KEY) *ec_keys)
{
ECerr(EC_F_EC_KEY_MERGE, EC_R_NOT_IMPLEMENTED);
return NULL;
}

View File

@@ -1,3 +1,51 @@
/* ====================================================================
* Copyright (c) 2016 - 2019 The GmSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the GmSSL Project.
* (http://gmssl.org/)"
*
* 4. The name "GmSSL Project" must not be used to endorse or promote
* products derived from this software without prior written
* permission. For written permission, please contact
* guanzhi1980@gmail.com.
*
* 5. Products derived from this software may not be called "GmSSL"
* nor may "GmSSL" appear in their names without prior written
* permission of the GmSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the GmSSL Project
* (http://gmssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*/
/*
* Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved.
*
@@ -540,6 +588,14 @@ static int pkey_ec_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
case EVP_PKEY_CTRL_CMS_SIGN:
return 1;
#ifndef OPENSSL_NO_SM2
case EVP_PKEY_CTRL_PKCS7_ENCRYPT:
case EVP_PKEY_CTRL_PKCS7_DECRYPT:
case EVP_PKEY_CTRL_CMS_DECRYPT:
case EVP_PKEY_CTRL_CMS_ENCRYPT:
return 1;
#endif
default:
return -2;

456
crypto/ec/ecahe.c Normal file
View File

@@ -0,0 +1,456 @@
/* ====================================================================
* Copyright (c) 2016 - 2019 The GmSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the GmSSL Project.
* (http://gmssl.org/)"
*
* 4. The name "GmSSL Project" must not be used to endorse or promote
* products derived from this software without prior written
* permission. For written permission, please contact
* guanzhi1980@gmail.com.
*
* 5. Products derived from this software may not be called "GmSSL"
* nor may "GmSSL" appear in their names without prior written
* permission of the GmSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the GmSSL Project
* (http://gmssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*/
#include <stdio.h>
#include <string.h>
#include <openssl/err.h>
#include <openssl/ecahe.h>
struct ECAHE_CIPHERTEXT_st {
EC_POINT *A;
EC_POINT *B;
};
ASN1_SEQUENCE(ECAHE_CIPHERTEXT) = {
ASN1_SIMPLE(ECAHE_CIPHERTEXT, A, ASN1_OCTET_STRING),
ASN1_SIMPLE(ECAHE_CIPHERTEXT, B, ASN1_OCTET_STRING)
} ASN1_SEQUENCE_END(ECAHE_CIPHERTEXT)
IMPLEMENT_ASN1_FUNCTIONS(ECAHE_CIPHERTEXT)
IMPLEMENT_ASN1_DUP_FUNCTION(ECAHE_CIPHERTEXT)
#define EC_MAX_PLAINTEXT (65536)
int ECAHE_ciphertext_size(EC_KEY *pk)
{
ECerr(EC_F_ECAHE_CIPHERTEXT_SIZE, ERR_R_EC_LIB);
return 0;
}
int ECAHE_encrypt(unsigned char *out, size_t *outlen, const BIGNUM *in, EC_KEY *pk)
{
ECerr(EC_F_ECAHE_ENCRYPT, ERR_R_EC_LIB);
return 0;
}
int ECAHE_decrypt(unsigned long *out, const unsigned char *in, size_t inlen, EC_KEY *sk)
{
ECerr(EC_F_ECAHE_DECRYPT, ERR_R_EC_LIB);
return 0;
}
int ECAHE_do_encrypt(ECAHE_CIPHERTEXT *c, const BIGNUM *m, EC_KEY *pk)
{
int ret = -1;
const EC_GROUP *group;
const EC_POINT *point;
BIGNUM *order = NULL;
BN_CTX *ctx = NULL;
BIGNUM *r = NULL;
OPENSSL_assert(c);
OPENSSL_assert(m);
OPENSSL_assert(pk);
if (!(group = EC_KEY_get0_group(pk))) {
ERR_print_errors_fp(stderr);
goto end;
}
if (!(order = BN_new())) {
ERR_print_errors_fp(stderr);
goto end;
}
if (!(ctx = BN_CTX_new())) {
ERR_print_errors_fp(stderr);
goto end;
}
if (!EC_GROUP_get_order(group, order, ctx)) {
ERR_print_errors_fp(stderr);
goto end;
}
if (!(r = BN_new())) {
ERR_print_errors_fp(stderr);
goto end;
}
do {
if (!BN_rand_range(r, order)) {
ERR_print_errors_fp(stderr);
goto end;
}
} while (BN_is_zero(r));
if (c->A == NULL) {
if (!(c->A = EC_POINT_new(group))) {
ERR_print_errors_fp(stderr);
goto end;
}
}
/* c->A = [r]G */
if (!EC_POINT_mul(group, c->A, r, NULL, NULL, ctx)) {
ERR_print_errors_fp(stderr);
goto end;
}
if (c->B == NULL) {
if (!(c->B = EC_POINT_new(group))) {
ERR_print_errors_fp(stderr);
goto end;
}
}
if (!(point = EC_KEY_get0_public_key(pk))) {
ERR_print_errors_fp(stderr);
goto end;
}
{
//EC_POINT *T = EC_POINT_new(group);
//EC_POINT_mul(group, T, m, NULL, NULL, ctx);
//printf("[m]G = %s\n", EC_POINT_point2hex(group, T, EC_PUBKEY_FORMAT, ctx));
}
/* c->b = [m]G + [r]P */
if (!EC_POINT_mul(group, c->B, m, point, r, ctx)) {
ERR_print_errors_fp(stderr);
goto end;
}
ret = 0;
end:
if (r) BN_free(r);
if (order) BN_free(order);
if (ctx) BN_CTX_free(ctx);
return ret;
}
/* A == [r]G
* B == [m]G + [r]P == [m]G + [rd]G
* B - [d]A == B - [rd]G == [m]G
*/
int ECAHE_do_decrypt(BIGNUM *m, const ECAHE_CIPHERTEXT *c, EC_KEY *sk)
{
int ret = -1;
const EC_GROUP *group;
const EC_POINT *G;
const BIGNUM *d;
BN_CTX *ctx = NULL;
BIGNUM *order = NULL;
EC_POINT *point = NULL;
EC_POINT *point2 = NULL;
unsigned int i;
OPENSSL_assert(m);
OPENSSL_assert(c && c->A && c->B);
OPENSSL_assert(sk);
if (!(group = EC_KEY_get0_group(sk))) {
ERR_print_errors_fp(stderr);
goto end;
}
if (!(G = EC_GROUP_get0_generator(group))) {
ERR_print_errors_fp(stderr);
goto end;
}
if (!(d = EC_KEY_get0_private_key(sk))) {
ERR_print_errors_fp(stderr);
goto end;
}
if (!(ctx = BN_CTX_new())) {
ERR_print_errors_fp(stderr);
goto end;
}
if (!(order = BN_new())) {
ERR_print_errors_fp(stderr);
goto end;
}
if (!EC_GROUP_get_order(group, order, ctx)) {
ERR_print_errors_fp(stderr);
goto end;
}
if (!(point = EC_POINT_new(group))) {
ERR_print_errors_fp(stderr);
goto end;
}
if (!BN_one(order)) {
ERR_print_errors_fp(stderr);
goto end;
}
/* point = [d]A = [rd]G */
if (!EC_POINT_mul(group, point, NULL, c->A, d, ctx)) {
ERR_print_errors_fp(stderr);
goto end;
}
/* point = -[rd]G */
if (!EC_POINT_invert(group, point, ctx)) {
ERR_print_errors_fp(stderr);
goto end;
}
/* point = B - [rd]G = [m]G + [rd]G - [rd]G = [m]G */
if (!EC_POINT_add(group, point, point, c->B, ctx)) {
ERR_print_errors_fp(stderr);
goto end;
}
{
//printf("[m]G = %s\n", EC_POINT_point2hex(group, point, EC_PUBKEY_FORMAT, ctx));
}
if (!(point2 = EC_POINT_new(group))) {
ERR_print_errors_fp(stderr);
goto end;
}
if (!EC_POINT_set_to_infinity(group, point2)) {
ERR_print_errors_fp(stderr);
goto end;
}
for (i = 0; i < EC_MAX_PLAINTEXT; i++) {
//printf("%03d ", i);
//printf(" %s\n", EC_POINT_point2hex(group, point, EC_PUBKEY_FORMAT, ctx));
//printf(" %s\n", EC_POINT_point2hex(group, point2, EC_PUBKEY_FORMAT, ctx));
if (EC_POINT_cmp(group, point, point2, ctx) == 0) {
if (!BN_set_word(m, i)) {
ERR_print_errors_fp(stderr);
goto end;
}
//printf("SUCCESS: %d\n", i+1);
ret = 0;
goto end;
}
EC_POINT_add(group, point2, point2, EC_GROUP_get0_generator(group), ctx);
}
end:
if (ctx) BN_CTX_free(ctx);
if (order) BN_free(order);
if (point) EC_POINT_free(point);
if (point2) EC_POINT_free(point2);
return ret;
}
int ECAHE_ciphertext_add(ECAHE_CIPHERTEXT *r,
const ECAHE_CIPHERTEXT *a, const ECAHE_CIPHERTEXT *b,
EC_KEY *pk)
{
const EC_GROUP *group = EC_KEY_get0_group(pk);
BN_CTX *ctx = NULL;
if (!(group = EC_KEY_get0_group(pk))) {
ERR_print_errors_fp(stderr);
return -1;
}
OPENSSL_assert(a->A);
OPENSSL_assert(b->A);
OPENSSL_assert(a->B);
OPENSSL_assert(b->B);
if (r->A == NULL) {
if (!(r->A = EC_POINT_new(group))) {
ERR_print_errors_fp(stderr);
return -1;
}
}
if (r->B == NULL) {
if (!(r->B = EC_POINT_new(group))) {
ERR_print_errors_fp(stderr);
return -1;
}
}
if (!(ctx = BN_CTX_new())) {
ERR_print_errors_fp(stderr);
return -1;
}
if (!EC_POINT_add(group, r->A, a->A, b->A, ctx)) {
ERR_print_errors_fp(stderr);
BN_CTX_free(ctx);
return -1;
}
if (!EC_POINT_add(group, r->B, a->B, b->B, ctx)) {
ERR_print_errors_fp(stderr);
BN_CTX_free(ctx);
return -1;
}
BN_CTX_free(ctx);
return 0;
}
int ECAHE_ciphertext_sub(ECAHE_CIPHERTEXT *r,
const ECAHE_CIPHERTEXT *a, const ECAHE_CIPHERTEXT *b,
EC_KEY *pk)
{
const EC_GROUP *group = EC_KEY_get0_group(pk);
BN_CTX *ctx = NULL;
if (!(group = EC_KEY_get0_group(pk))) {
ERR_print_errors_fp(stderr);
return -1;
}
OPENSSL_assert(a->A);
OPENSSL_assert(b->A);
OPENSSL_assert(a->B);
OPENSSL_assert(b->B);
if (ECAHE_ciphertext_neg(r, b, pk) < 0) {
fprintf(stderr, "%s (%s %d): ec_ciphertext_neg failed\n",
__FUNCTION__, __FILE__, __LINE__);
return -1;
}
if (!(ctx = BN_CTX_new())) {
ERR_print_errors_fp(stderr);
return -1;
}
if (!EC_POINT_add(group, r->A, r->A, a->A, ctx)) {
ERR_print_errors_fp(stderr);
BN_CTX_free(ctx);
return -1;
}
if (!EC_POINT_add(group, r->B, r->B, a->B, ctx)) {
ERR_print_errors_fp(stderr);
BN_CTX_free(ctx);
return -1;
}
BN_CTX_free(ctx);
return 0;
}
int ECAHE_ciphertext_neg(ECAHE_CIPHERTEXT *r, const ECAHE_CIPHERTEXT *a,
EC_KEY *pk)
{
const EC_GROUP *group;
BN_CTX *ctx = NULL;
OPENSSL_assert(r && a && pk);
OPENSSL_assert(a->A);
OPENSSL_assert(a->B);
if (!(group = EC_KEY_get0_group(pk))) {
ERR_print_errors_fp(stderr);
return -1;
}
if (r->A)
EC_POINT_free(r->A);
if (!(r->A = EC_POINT_dup(a->A, group))) {
ERR_print_errors_fp(stderr);
return -1;
}
if (r->B)
EC_POINT_free(r->B);
if (!(r->B = EC_POINT_dup(a->B, group))) {
ERR_print_errors_fp(stderr);
return -1;
}
if (!(ctx = BN_CTX_new())) {
ERR_print_errors_fp(stderr);
return -1;
}
if (!EC_POINT_invert(group, r->A, ctx)) {
ERR_print_errors_fp(stderr);
BN_CTX_free(ctx);
return -1;
}
if (!EC_POINT_invert(group, r->B, ctx)) {
ERR_print_errors_fp(stderr);
BN_CTX_free(ctx);
return -1;
}
BN_CTX_free(ctx);
return 0;
}

2
crypto/ecrs/build.info Normal file
View File

@@ -0,0 +1,2 @@
LIBS=../../libcrypto
SOURCE[../../libcrypto]=ecrs_err.c ecrs_asn1.c ecrs_lib.c

65
crypto/ecrs/ecrs_asn1.c Normal file
View File

@@ -0,0 +1,65 @@
/* ====================================================================
* Copyright (c) 2014 - 2019 The GmSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the GmSSL Project.
* (http://gmssl.org/)"
*
* 4. The name "GmSSL Project" must not be used to endorse or promote
* products derived from this software without prior written
* permission. For written permission, please contact
* guanzhi1980@gmail.com.
*
* 5. Products derived from this software may not be called "GmSSL"
* nor may "GmSSL" appear in their names without prior written
* permission of the GmSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the GmSSL Project
* (http://gmssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*/
#include <openssl/asn1.h>
#include <openssl/asn1t.h>
#include <openssl/ecrs.h>
#include "./ecrs_lcl.h"
ASN1_SEQUENCE(ECRS_SIG) = {
ASN1_SIMPLE(ECRS_SIG, s, BIGNUM),
ASN1_SEQUENCE_OF(ECRS_SIG, c, BIGNUM),
} ASN1_SEQUENCE_END(ECRS_SIG)
IMPLEMENT_ASN1_FUNCTIONS(ECRS_SIG)
IMPLEMENT_ASN1_DUP_FUNCTION(ECRS_SIG)
int ECRS_size(const EC_KEY *ec_key, int n)
{
return 128 * n;
}

52
crypto/ecrs/ecrs_err.c Normal file
View File

@@ -0,0 +1,52 @@
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (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 <stdio.h>
#include <openssl/err.h>
#include <openssl/ecrs.h>
/* BEGIN ERROR CODES */
#ifndef OPENSSL_NO_ERR
# define ERR_FUNC(func) ERR_PACK(ERR_LIB_ECRS,func,0)
# define ERR_REASON(reason) ERR_PACK(ERR_LIB_ECRS,0,reason)
static ERR_STRING_DATA ECRS_str_functs[] = {
{ERR_FUNC(ECRS_F_ECRS_DO_SIGN), "ECRS_do_sign"},
{ERR_FUNC(ECRS_F_ECRS_DO_VERIFY), "ECRS_do_verify"},
{ERR_FUNC(ECRS_F_ECRS_SIGN), "ECRS_sign"},
{ERR_FUNC(ECRS_F_ECRS_VERIFY), "ECRS_verify"},
{0, NULL}
};
static ERR_STRING_DATA ECRS_str_reasons[] = {
{ERR_REASON(ECRS_R_EC_KEY_NOT_MATCH), "ec key not match"},
{ERR_REASON(ECRS_R_INVALID_DIGEST_ALGOR), "invalid digest algor"},
{ERR_REASON(ECRS_R_NO_SIGNING_KEY), "no signing key"},
{ERR_REASON(ECRS_R_PARSE_SIGNATURE_FAILURE), "parse signature failure"},
{ERR_REASON(ECRS_R_PUBLIC_KEYS_NOT_MATCH), "public keys not match"},
{ERR_REASON(ECRS_R_PUBLIC_KEYS_NOT_MATCH_SIG),
"public keys not match sig"},
{0, NULL}
};
#endif
int ERR_load_ECRS_strings(void)
{
#ifndef OPENSSL_NO_ERR
if (ERR_func_error_string(ECRS_str_functs[0].error) == NULL) {
ERR_load_strings(0, ECRS_str_functs);
ERR_load_strings(0, ECRS_str_reasons);
}
#endif
return 1;
}

56
crypto/ecrs/ecrs_lcl.h Normal file
View File

@@ -0,0 +1,56 @@
/*
* Copyright (c) 2015 - 2019 The GmSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the GmSSL Project.
* (http://gmssl.org/)"
*
* 4. The name "GmSSL Project" must not be used to endorse or promote
* products derived from this software without prior written
* permission. For written permission, please contact
* guanzhi1980@gmail.com.
*
* 5. Products derived from this software may not be called "GmSSL"
* nor may "GmSSL" appear in their names without prior written
* permission of the GmSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the GmSSL Project
* (http://gmssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <openssl/bn.h>
#include <openssl/stack.h>
struct ECRS_SIG_st {
BIGNUM *s;
STACK_OF(BIGNUM) *c;
};

411
crypto/ecrs/ecrs_lib.c Normal file
View File

@@ -0,0 +1,411 @@
/*
* Copyright (c) 2015 - 2019 The GmSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the GmSSL Project.
* (http://gmssl.org/)"
*
* 4. The name "GmSSL Project" must not be used to endorse or promote
* products derived from this software without prior written
* permission. For written permission, please contact
* guanzhi1980@gmail.com.
*
* 5. Products derived from this software may not be called "GmSSL"
* nor may "GmSSL" appear in their names without prior written
* permission of the GmSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the GmSSL Project
* (http://gmssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <openssl/err.h>
#include <openssl/ecrs.h>
#include "./ecrs_lcl.h"
ECRS_SIG *ECRS_do_sign(const EVP_MD *md, const unsigned char *dgst,
int dgstlen, STACK_OF(EC_KEY) *pub_keys, EC_KEY *ec_key)
{
ECRS_SIG *ret = NULL;
ECRS_SIG *sig = NULL;
const EC_GROUP *group;
const BIGNUM *order;
BIGNUM *ck = NULL; /* ref of STACK_OF(BIGNUM) elements, dont free */
BIGNUM *a = NULL;
BIGNUM *c = NULL;
BIGNUM *z = NULL;
BN_CTX *bn_ctx = NULL;
EC_POINT *R = NULL;
EC_POINT *T = NULL;
EVP_MD_CTX *mctx = NULL;
int form = POINT_CONVERSION_UNCOMPRESSED;
unsigned char buf[512];
unsigned char *p = buf;
unsigned int ulen;
size_t siz;
int len, i;
group = EC_KEY_get0_group(ec_key);
order = EC_GROUP_get0_order(group);
if (!(sig = ECRS_SIG_new())
|| !(sig->s = BN_new())
|| !(sig->c = sk_BIGNUM_new(NULL))
|| !(a = BN_new())
|| !(c = BN_new())
|| !(z = BN_new())
|| !(bn_ctx = BN_CTX_new())
|| !(R = EC_POINT_new(group))
|| !(T = EC_POINT_new(group))
|| !(mctx = EVP_MD_CTX_new())) {
ECRSerr(ECRS_F_ECRS_DO_SIGN, ERR_R_MALLOC_FAILURE);
goto end;
}
/* hash update ECParameters */
if (!(len = i2d_ECPKParameters(group, &p))) {
ECRSerr(ECRS_F_ECRS_DO_SIGN, ERR_R_EC_LIB);
goto end;
}
if (!EVP_DigestInit_ex(mctx, md, NULL)
|| !EVP_DigestUpdate(mctx, buf, len)) {
ECRSerr(ECRS_F_ECRS_DO_SIGN, ERR_R_EVP_LIB);
goto end;
}
/* a = rand(1, order) */
do {
if (!BN_rand_range(a, order)) {
ECRSerr(ECRS_F_ECRS_DO_SIGN, ERR_R_BN_LIB);
goto end;
}
} while (BN_is_zero(a));
/* R = [a]G */
if (!EC_POINT_mul(group, R, a, NULL, NULL, bn_ctx)) {
ECRSerr(ECRS_F_ECRS_DO_SIGN, ERR_R_EC_LIB);
goto end;
}
for (i = 0; i < sk_EC_KEY_num(pub_keys); i++) {
const EC_KEY *pub_key = sk_EC_KEY_value(pub_keys, i);
const EC_POINT *Pi = EC_KEY_get0_public_key(pub_key);
BIGNUM *ci;
/* check P_i */
if (EC_GROUP_cmp(EC_KEY_get0_group(pub_key), group, bn_ctx) != 0) {
ECRSerr(ECRS_F_ECRS_DO_SIGN, ECRS_R_EC_KEY_NOT_MATCH);
goto end;
}
/* hash update P_i = (x_i, y_i) */
if (!(siz = EC_POINT_point2oct(group, Pi, form, buf,
sizeof(buf), bn_ctx))) {
ECRSerr(ECRS_F_ECRS_DO_SIGN, ERR_R_EC_LIB);
goto end;
}
if (!EVP_DigestUpdate(mctx, buf + 1, siz - 1)) {
ECRSerr(ECRS_F_ECRS_DO_SIGN, ERR_R_EVP_LIB);
goto end;
}
/* create c_i */
if (!(ci = BN_new())) {
ECRSerr(ECRS_F_ECRS_DO_SIGN, ERR_R_MALLOC_FAILURE);
goto end;
}
sk_BIGNUM_push(sig->c, ci);
/* find signer's public key */
if (EC_POINT_cmp(group, Pi, EC_KEY_get0_public_key(ec_key),
bn_ctx) == 0) {
if (ck) {
ECRSerr(ECRS_F_ECRS_DO_SIGN, ERR_R_ECRS_LIB);
goto end;
}
ck = ci;
continue;
}
/* c_i = rand(1, order) */
do {
if (!BN_rand_range(ci, order)) {
ECRSerr(ECRS_F_ECRS_DO_SIGN, ERR_R_BN_LIB);
goto end;
}
} while (BN_is_zero(ci));
/* R = R + [c_i]P_i */
if (!EC_POINT_mul(group, T, NULL, Pi, ci, bn_ctx)
|| !EC_POINT_add(group, R, R, T, bn_ctx)) {
ECRSerr(ECRS_F_ECRS_DO_SIGN, ERR_R_EC_LIB);
goto end;
}
/* z = z + c_i */
if (!BN_mod_add(z, z, ci, order, bn_ctx)) {
ECRSerr(ECRS_F_ECRS_DO_SIGN, ERR_R_BN_LIB);
goto end;
}
}
/* no signing private key found */
if (!ck) {
ECRSerr(ECRS_F_ECRS_DO_SIGN, ECRS_R_NO_SIGNING_KEY);
goto end;
}
/* hash update dgst and R */
if (!(siz = EC_POINT_point2oct(group, R, form, buf, sizeof(buf),
bn_ctx))) {
ECRSerr(ECRS_F_ECRS_DO_SIGN, ERR_R_EC_LIB);
goto end;
}
if (!EVP_DigestUpdate(mctx, dgst, dgstlen)
|| !EVP_DigestUpdate(mctx, buf + 1, siz - 1)
|| !EVP_DigestFinal_ex(mctx, buf, &ulen)) {
ECRSerr(ECRS_F_ECRS_DO_SIGN, ERR_R_EVP_LIB);
goto end;
}
/* c = hash({Pi}, Hash(m), R) mod #G */
if (!BN_bin2bn(buf, ulen, c)) {
ECRSerr(ECRS_F_ECRS_DO_SIGN, ERR_R_BN_LIB);
goto end;
}
/* c_k = c - (c_0 + ... + c_{k-1} + c_{k+1} + ... + c_{n-1}) mod #G */
if (!BN_mod_sub(ck, c, z, order, bn_ctx)) {
ECRSerr(ECRS_F_ECRS_DO_SIGN, ERR_R_BN_LIB);
goto end;
}
/* sig->s = a - c_k * x_k mod #G */
if (!BN_mod_mul(sig->s, ck, EC_KEY_get0_private_key(ec_key), order, bn_ctx)
|| !BN_mod_sub(sig->s, a, sig->s, order, bn_ctx)) {
ECRSerr(ECRS_F_ECRS_DO_SIGN, ERR_R_BN_LIB);
goto end;
}
ret = sig;
sig = NULL;
end:
ECRS_SIG_free(sig);
BN_free(a);
BN_free(c);
BN_CTX_free(bn_ctx);
EC_POINT_free(R);
EC_POINT_free(T);
EVP_MD_CTX_free(mctx);
return ret;
}
/*
* Verify(m, sig=(s, c_0, ..., c_{n-1}, {P_i}):
* R = [s]G + [c_0]P_0 + ... + [c_{n-1}]P_{n-1}
* c = c_0 + ... + c_{n-1}
* h = Hash({P_i}, Hash(m), R)
* return c =?= h
*/
int ECRS_do_verify(const EVP_MD *md, const unsigned char *dgst, int dgstlen,
const ECRS_SIG *sig, STACK_OF(EC_KEY) *pub_keys)
{
int ret = -1;
const EC_GROUP *group = NULL;
const BIGNUM *order = NULL;
BIGNUM *c = NULL;
BIGNUM *h = NULL;
BN_CTX *bn_ctx = NULL;
EC_POINT *R = NULL;
EC_POINT *T = NULL;
EVP_MD_CTX *mctx = NULL;
int form = POINT_CONVERSION_UNCOMPRESSED;
unsigned char buf[512];
unsigned char *p = buf;
unsigned int ulen;
size_t siz;
int len, i;
if (sk_BIGNUM_num(sig->c) != sk_EC_KEY_num(pub_keys)) {
ECRSerr(ECRS_F_ECRS_DO_VERIFY, ECRS_R_PUBLIC_KEYS_NOT_MATCH_SIG);
return -1;
}
group = EC_KEY_get0_group(sk_EC_KEY_value(pub_keys, 0));
order = EC_GROUP_get0_order(group);
if (!(c = BN_new())
|| !(h = BN_new())
|| !(bn_ctx = BN_CTX_new())
|| !(R = EC_POINT_new(group))
|| !(T = EC_POINT_new(group))
|| !(mctx = EVP_MD_CTX_new())) {
ECRSerr(ECRS_F_ECRS_DO_VERIFY, ERR_R_MALLOC_FAILURE);
goto end;
}
/* hash update ECParameters */
/* hash update ECParameters */
if (!(len = i2d_ECPKParameters(group, &p))) {
ECRSerr(ECRS_F_ECRS_DO_VERIFY, ERR_R_EC_LIB);
goto end;
}
if (!EVP_DigestInit_ex(mctx, md, NULL)
|| !EVP_DigestUpdate(mctx, buf, len)) {
ECRSerr(ECRS_F_ECRS_DO_VERIFY, ERR_R_EVP_LIB);
goto end;
}
/* R = [s]G */
if (!EC_POINT_mul(group, R, sig->s, NULL, NULL, bn_ctx)) {
ECRSerr(ECRS_F_ECRS_DO_VERIFY, ERR_R_EC_LIB);
goto end;
}
for (i = 0; i < sk_BIGNUM_num(sig->c); i++) {
EC_KEY *ec_key = sk_EC_KEY_value(pub_keys, i);
const EC_POINT *Pi = EC_KEY_get0_public_key(ec_key);
BIGNUM *ci = sk_BIGNUM_value(sig->c, i);
/* check Pi */
if (EC_GROUP_cmp(EC_KEY_get0_group(ec_key), group, bn_ctx) != 0) {
ECRSerr(ECRS_F_ECRS_DO_VERIFY, ECRS_R_PUBLIC_KEYS_NOT_MATCH);
goto end;
}
/* hash update P_i = (x_i, y_i) */
if (!(siz = EC_POINT_point2oct(group, Pi, form, buf,
sizeof(buf), bn_ctx))) {
ECRSerr(ECRS_F_ECRS_DO_VERIFY, ERR_R_EC_LIB);
goto end;
}
if (!EVP_DigestUpdate(mctx, buf + 1, siz - 1)) {
ECRSerr(ECRS_F_ECRS_DO_VERIFY, ERR_R_EVP_LIB);
goto end;
}
/* R = R + [c_i]P_i */
if (!EC_POINT_mul(group, T, NULL, Pi, ci, bn_ctx)
|| !EC_POINT_add(group, R, R, T, bn_ctx)) {
ECRSerr(ECRS_F_ECRS_DO_VERIFY, ERR_R_EC_LIB);
goto end;
}
/* c = c + c_i mod #G */
if (!BN_mod_add(c, c, ci, order, bn_ctx)) {
ECRSerr(ECRS_F_ECRS_DO_VERIFY, ERR_R_BN_LIB);
goto end;
}
}
/* hash update dgst and R */
if (!(siz = EC_POINT_point2oct(group, R, form, buf, sizeof(buf),
bn_ctx))) {
ECRSerr(ECRS_F_ECRS_DO_VERIFY, ERR_R_EC_LIB);
goto end;
}
if (!EVP_DigestUpdate(mctx, dgst, dgstlen)
|| !EVP_DigestUpdate(mctx, buf + 1, siz - 1)
|| !EVP_DigestFinal_ex(mctx, buf, &ulen)) {
ECRSerr(ECRS_F_ECRS_DO_VERIFY, ERR_R_EVP_LIB);
goto end;
}
/* h = hash({Pi}, Hash(m), R) mod #G */
if (!BN_bin2bn(buf, ulen, h)) {
ECRSerr(ECRS_F_ECRS_DO_VERIFY, ERR_R_BN_LIB);
goto end;
}
//FIXME: h mod #G */
if (BN_cmp(h, c) == 0)
ret = 1;
else
ret = 0;
end:
BN_free(c);
BN_free(h);
BN_CTX_free(bn_ctx);
EC_POINT_free(R);
EC_POINT_free(T);
EVP_MD_CTX_free(mctx);
return ret;
}
int ECRS_sign(int type, const unsigned char *dgst, int dgstlen,
unsigned char *sig, unsigned int *siglen, STACK_OF(EC_KEY) *pub_keys,
EC_KEY *ec_key)
{
const EVP_MD *md;
ECRS_SIG *s = NULL;
if (!(md = EVP_get_digestbynid(type))) {
ECRSerr(ECRS_F_ECRS_SIGN, ECRS_R_INVALID_DIGEST_ALGOR);
return 0;
}
if (!(s = ECRS_do_sign(md, dgst, dgstlen, pub_keys, ec_key))) {
ECRSerr(ECRS_F_ECRS_SIGN, ERR_R_ECRS_LIB);
return 0;
}
*siglen = i2d_ECRS_SIG(s, &sig);
ECRS_SIG_free(s);
return 1;
}
int ECRS_verify(int type, const unsigned char *dgst, int dgstlen,
const unsigned char *sig, int siglen, STACK_OF(EC_KEY) *pub_keys)
{
const EVP_MD *md;
ECRS_SIG *s = NULL;
const unsigned char *p = sig;
int ret = -1;
if (!(s = d2i_ECRS_SIG(NULL, &p, siglen))) {
ECRSerr(ECRS_F_ECRS_VERIFY, ECRS_R_PARSE_SIGNATURE_FAILURE);
return -1;
}
if (p != sig + siglen) {
ECRSerr(ECRS_F_ECRS_VERIFY, ECRS_R_PARSE_SIGNATURE_FAILURE);
goto end;
}
ret = ECRS_do_verify(md, dgst, dgstlen, s, pub_keys);
end:
ECRS_SIG_free(s);
return ret;
}

View File

@@ -74,6 +74,7 @@ static ERR_STRING_DATA ERR_str_libraries[] = {
{ERR_PACK(ERR_LIB_SKF, 0, 0), "SKF routines"},
{ERR_PACK(ERR_LIB_SOF, 0, 0), "SOF routines"},
{ERR_PACK(ERR_LIB_BASE58, 0, 0), "BASE58 routines"},
{ERR_PACK(ERR_LIB_ECRS, 0, 0), "ECRS routines"},
{0, NULL},
};
@@ -133,6 +134,7 @@ static ERR_STRING_DATA ERR_str_reasons[] = {
{ERR_R_SKF_LIB, "SKF lib"},
{ERR_R_SOF_LIB, "SOF lib"},
{ERR_R_BASE58_LIB, "BASE58 lib"},
{ERR_R_ECRS_LIB, "ECRS lib"},
{ERR_R_NESTED_ASN1_ERROR, "nested asn1 error"},
{ERR_R_MISSING_ASN1_EOS, "missing asn1 eos"},

View File

@@ -108,6 +108,9 @@
#ifndef OPENSSL_NO_BASE58
# include <openssl/base58.h>
#endif
#ifndef OPENSSL_NO_ECRS
# include <openssl/ecrs.h>
#endif
int err_load_crypto_strings_int(void)
@@ -218,6 +221,9 @@ int err_load_crypto_strings_int(void)
# ifndef OPENSSL_NO_BASE58
ERR_load_BASE58_strings() == 0 ||
# endif
# ifndef OPENSSL_NO_ECRS
ERR_load_ECRS_strings() == 0 ||
# endif
#endif
ERR_load_KDF_strings() == 0)
return 0;

View File

@@ -50,6 +50,7 @@ L SDF include/openssl/gmsdf.h crypto/sdf/sdf_err.c
L SKF include/openssl/gmskf.h crypto/skf/skf_err.c
L SOF include/openssl/gmsof.h crypto/sof/sof_err.c
L BASE58 include/openssl/base58.h crypto/base58/base58_err.c
L ECRS include/openssl/ecrs.h crypto/ecrs/ecrs_err.c
# additional header files to be scanned for function names
L NONE crypto/x509/x509_vfy.h NONE

View File

@@ -1,3 +1,51 @@
/* ====================================================================
* Copyright (c) 2016 - 2019 The GmSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the GmSSL Project.
* (http://gmssl.org/)"
*
* 4. The name "GmSSL Project" must not be used to endorse or promote
* products derived from this software without prior written
* permission. For written permission, please contact
* guanzhi1980@gmail.com.
*
* 5. Products derived from this software may not be called "GmSSL"
* nor may "GmSSL" appear in their names without prior written
* permission of the GmSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the GmSSL Project
* (http://gmssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*/
/*
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
*
@@ -14,6 +62,9 @@
#include <openssl/x509.h>
#include <openssl/x509v3.h>
#include <openssl/err.h>
#ifndef OPENSSL_NO_SM2
# include <openssl/sm2.h>
#endif
static int add_attribute(STACK_OF(X509_ATTRIBUTE) **sk, int nid, int atrtype,
void *value);
@@ -105,6 +156,13 @@ static int pkcs7_encode_rinfo(PKCS7_RECIP_INFO *ri,
if (EVP_PKEY_encrypt_init(pctx) <= 0)
goto err;
#ifndef OPENSSL_NO_SM2
if (OBJ_obj2nid(ri->key_enc_algor->algorithm) == NID_sm2encrypt_with_sm3) {
EVP_PKEY_CTX_set_ec_scheme(pctx, NID_sm_scheme);
EVP_PKEY_CTX_set_ec_encrypt_param(pctx, NID_sm3);
}
#endif
if (EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_ENCRYPT,
EVP_PKEY_CTRL_PKCS7_ENCRYPT, 0, ri) <= 0) {
PKCS7err(PKCS7_F_PKCS7_ENCODE_RINFO, PKCS7_R_CTRL_ERROR);
@@ -152,6 +210,13 @@ static int pkcs7_decrypt_rinfo(unsigned char **pek, int *peklen,
if (EVP_PKEY_decrypt_init(pctx) <= 0)
goto err;
#ifndef OPENSSL_NO_SM2
if (OBJ_obj2nid(ri->key_enc_algor->algorithm) == NID_sm2encrypt_with_sm3) {
EVP_PKEY_CTX_set_ec_scheme(pctx, NID_sm_scheme);
EVP_PKEY_CTX_set_ec_encrypt_param(pctx, NID_sm3);
}
#endif
if (EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DECRYPT,
EVP_PKEY_CTRL_PKCS7_DECRYPT, 0, ri) <= 0) {
PKCS7err(PKCS7_F_PKCS7_DECRYPT_RINFO, PKCS7_R_CTRL_ERROR);
@@ -832,6 +897,12 @@ int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si)
if (EVP_DigestSignInit(mctx, &pctx, md, NULL, si->pkey) <= 0)
goto err;
#ifndef OPENSSL_NO_SM2
if (OBJ_obj2nid(si->digest_enc_alg->algorithm) == NID_sm2sign_with_sm3) {
EVP_PKEY_CTX_set_ec_scheme(pctx, NID_sm_scheme);
}
#endif
if (EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_SIGN,
EVP_PKEY_CTRL_PKCS7_SIGN, 0, si) <= 0) {
PKCS7err(PKCS7_F_PKCS7_SIGNER_INFO_SIGN, PKCS7_R_CTRL_ERROR);
@@ -940,6 +1011,9 @@ int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si,
STACK_OF(X509_ATTRIBUTE) *sk;
BIO *btmp;
EVP_PKEY *pkey;
#ifndef OPENSSL_NO_SM2
EVP_PKEY_CTX *pctx;
#endif
mdc_tmp = EVP_MD_CTX_new();
if (mdc_tmp == NULL) {
@@ -985,6 +1059,13 @@ int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si,
if (!EVP_MD_CTX_copy_ex(mdc_tmp, mdc))
goto err;
os = si->enc_digest;
pkey = X509_get0_pubkey(x509);
if (!pkey) {
ret = -1;
goto err;
}
sk = si->auth_attr;
if ((sk != NULL) && (sk_X509_ATTRIBUTE_num(sk) != 0)) {
unsigned char md_dat[EVP_MAX_MD_SIZE], *abuf = NULL;
@@ -1007,9 +1088,15 @@ int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si,
goto err;
}
if (!EVP_VerifyInit_ex(mdc_tmp, EVP_get_digestbynid(md_type), NULL))
if (!EVP_DigestVerifyInit(mdc_tmp, &pctx,
EVP_get_digestbynid(md_type), NULL, pkey)) {
goto err;
}
#ifndef OPENSSL_NO_SM2
if (OBJ_obj2nid(si->digest_enc_alg->algorithm) == NID_sm2sign_with_sm3) {
EVP_PKEY_CTX_set_ec_scheme(pctx, NID_sm_scheme);
}
#endif
alen = ASN1_item_i2d((ASN1_VALUE *)sk, &abuf,
ASN1_ITEM_rptr(PKCS7_ATTR_VERIFY));
if (alen <= 0) {
@@ -1017,20 +1104,13 @@ int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si,
ret = -1;
goto err;
}
if (!EVP_VerifyUpdate(mdc_tmp, abuf, alen))
if (!EVP_DigestVerifyUpdate(mdc_tmp, abuf, alen))
goto err;
OPENSSL_free(abuf);
}
os = si->enc_digest;
pkey = X509_get0_pubkey(x509);
if (!pkey) {
ret = -1;
goto err;
}
i = EVP_VerifyFinal(mdc_tmp, os->data, os->length, pkey);
i = EVP_DigestVerifyFinal(mdc_tmp, os->data, os->length);
if (i <= 0) {
PKCS7err(PKCS7_F_PKCS7_SIGNATUREVERIFY, PKCS7_R_SIGNATURE_FAILURE);
ret = -1;

View File

@@ -1,3 +1,51 @@
/* ====================================================================
* Copyright (c) 2016 - 2019 The GmSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the GmSSL Project.
* (http://gmssl.org/)"
*
* 4. The name "GmSSL Project" must not be used to endorse or promote
* products derived from this software without prior written
* permission. For written permission, please contact
* guanzhi1980@gmail.com.
*
* 5. Products derived from this software may not be called "GmSSL"
* nor may "GmSSL" appear in their names without prior written
* permission of the GmSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the GmSSL Project
* (http://gmssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*/
/*
* Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved.
*
@@ -146,6 +194,9 @@ PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, X509 *signcert,
|| !add_cipher_smcap(smcap, NID_aes_192_cbc, -1)
|| !add_cipher_smcap(smcap, NID_aes_128_cbc, -1)
|| !add_cipher_smcap(smcap, NID_des_ede3_cbc, -1)
#ifndef OPENSSL_NO_SMS4
|| !add_cipher_smcap(smcap, NID_sms4_cbc, -1)
#endif
|| !add_cipher_smcap(smcap, NID_rc2_cbc, 128)
|| !add_cipher_smcap(smcap, NID_rc2_cbc, 64)
|| !add_cipher_smcap(smcap, NID_des_cbc, -1)

View File

@@ -142,3 +142,71 @@ int i2d_SM2CiphertextValue_fp(FILE *fp, SM2CiphertextValue *a)
return ASN1_item_i2d_fp(ASN1_ITEM_rptr(SM2CiphertextValue), fp, a);
}
#endif
ASN1_SEQUENCE(SM2_COSIGNER1_SHARE) = {
ASN1_SIMPLE(SM2_COSIGNER1_SHARE, a, BIGNUM),
ASN1_SIMPLE(SM2_COSIGNER1_SHARE, b, BIGNUM)
} ASN1_SEQUENCE_END(SM2_COSIGNER1_SHARE)
IMPLEMENT_ASN1_FUNCTIONS(SM2_COSIGNER1_SHARE)
IMPLEMENT_ASN1_DUP_FUNCTION(SM2_COSIGNER1_SHARE)
ASN1_SEQUENCE(SM2_COSIGNER2_SHARE) = {
ASN1_SIMPLE(SM2_COSIGNER2_SHARE, a, BIGNUM),
ASN1_SIMPLE(SM2_COSIGNER2_SHARE, b, BIGNUM)
} ASN1_SEQUENCE_END(SM2_COSIGNER2_SHARE)
IMPLEMENT_ASN1_FUNCTIONS(SM2_COSIGNER2_SHARE)
IMPLEMENT_ASN1_DUP_FUNCTION(SM2_COSIGNER2_SHARE)
ASN1_SEQUENCE(SM2_COSIGNER1_PROOF) = {
ASN1_SIMPLE(SM2_COSIGNER1_PROOF, a, BIGNUM),
ASN1_SIMPLE(SM2_COSIGNER1_PROOF, b, BIGNUM)
} ASN1_SEQUENCE_END(SM2_COSIGNER1_PROOF)
IMPLEMENT_ASN1_FUNCTIONS(SM2_COSIGNER1_PROOF)
IMPLEMENT_ASN1_DUP_FUNCTION(SM2_COSIGNER1_PROOF)
ASN1_SEQUENCE(SM2_COSIGNER2_PROOF) = {
ASN1_SIMPLE(SM2_COSIGNER2_PROOF, a, BIGNUM),
ASN1_SIMPLE(SM2_COSIGNER2_PROOF, b, BIGNUM)
} ASN1_SEQUENCE_END(SM2_COSIGNER2_PROOF)
IMPLEMENT_ASN1_FUNCTIONS(SM2_COSIGNER2_PROOF)
IMPLEMENT_ASN1_DUP_FUNCTION(SM2_COSIGNER2_PROOF)
int i2d_SM2_COSIGNER1_SHARE_bio(BIO *bp, SM2_COSIGNER1_SHARE *a)
{
return ASN1_item_i2d_bio(ASN1_ITEM_rptr(SM2_COSIGNER1_SHARE), bp, a);
}
SM2_COSIGNER1_SHARE *d2i_SM2_COSIGNER1_SHARE_bio(BIO *bp, SM2_COSIGNER1_SHARE **a)
{
return ASN1_item_d2i_bio(ASN1_ITEM_rptr(SM2_COSIGNER1_SHARE), bp, a);
}
int i2d_SM2_COSIGNER2_SHARE_bio(BIO *bp, SM2_COSIGNER2_SHARE *a)
{
return ASN1_item_i2d_bio(ASN1_ITEM_rptr(SM2_COSIGNER2_SHARE), bp, a);
}
SM2_COSIGNER2_SHARE *d2i_SM2_COSIGNER2_SHARE_bio(BIO *bp, SM2_COSIGNER2_SHARE **a)
{
return ASN1_item_d2i_bio(ASN1_ITEM_rptr(SM2_COSIGNER2_SHARE), bp, a);
}
int i2d_SM2_COSIGNER1_PROOF_bio(BIO *bp, SM2_COSIGNER1_PROOF *a)
{
return ASN1_item_i2d_bio(ASN1_ITEM_rptr(SM2_COSIGNER1_PROOF), bp, a);
}
SM2_COSIGNER1_PROOF *d2i_SM2_COSIGNER1_PROOF_bio(BIO *bp, SM2_COSIGNER1_PROOF **a)
{
return ASN1_item_d2i_bio(ASN1_ITEM_rptr(SM2_COSIGNER1_PROOF), bp, a);
}
int i2d_SM2_COSIGNER2_PROOF_bio(BIO *bp, SM2_COSIGNER2_PROOF *a)
{
return ASN1_item_i2d_bio(ASN1_ITEM_rptr(SM2_COSIGNER2_PROOF), bp, a);
}
SM2_COSIGNER2_PROOF *d2i_SM2_COSIGNER2_PROOF_bio(BIO *bp, SM2_COSIGNER2_PROOF **a)
{
return ASN1_item_d2i_bio(ASN1_ITEM_rptr(SM2_COSIGNER2_PROOF), bp, a);
}

90
crypto/sm2/sm2_cosign.c Normal file
View File

@@ -0,0 +1,90 @@
/* ====================================================================
* Copyright (c) 2015 - 2019 The GmSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the GmSSL Project.
* (http://gmssl.org/)"
*
* 4. The name "GmSSL Project" must not be used to endorse or promote
* products derived from this software without prior written
* permission. For written permission, please contact
* guanzhi1980@gmail.com.
*
* 5. Products derived from this software may not be called "GmSSL"
* nor may "GmSSL" appear in their names without prior written
* permission of the GmSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the GmSSL Project
* (http://gmssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*/
#include <string.h>
#include <openssl/bn.h>
#include <openssl/ec.h>
#include <openssl/sm2.h>
#include <openssl/err.h>
#include <openssl/evp.h>
#include <openssl/rand.h>
#include <openssl/obj_mac.h>
#include <openssl/paillier.h>
#include "../ec/ec_lcl.h"
#include "sm2_lcl.h"
SM2_COSIGNER1_SHARE *SM2_cosigner1_setup(BIGNUM **k1, EC_KEY *ec_key, PAILLIER *pk)
{
SM2err(SM2_F_SM2_COSIGNER1_SETUP, SM2_R_NOT_IMPLEMENTED);
return NULL;
}
SM2_COSIGNER2_SHARE *SM2_cosigner2_setup(const SM2_COSIGNER1_SHARE *s1, BIGNUM **k2, EC_KEY *ec_key, PAILLIER *pk)
{
SM2err(SM2_F_SM2_COSIGNER2_SETUP, SM2_R_NOT_IMPLEMENTED);
return NULL;
}
SM2_COSIGNER1_PROOF *SM2_cosigner1_generate_proof(EC_KEY *ec_key, PAILLIER *pk)
{
SM2err(SM2_F_SM2_COSIGNER1_GENERATE_PROOF, SM2_R_NOT_IMPLEMENTED);
return NULL;
}
SM2_COSIGNER2_PROOF *SM2_cosigner2_generate_proof(EC_KEY *ec_key, PAILLIER *pk)
{
SM2err(SM2_F_SM2_COSIGNER2_GENERATE_PROOF, SM2_R_NOT_IMPLEMENTED);
return NULL;
}
ECDSA_SIG *SM2_cosigner1_generate_signature(EC_KEY *ec_key, PAILLIER *pk)
{
SM2err(SM2_F_SM2_COSIGNER1_GENERATE_SIGNATURE, SM2_R_NOT_IMPLEMENTED);
return NULL;
}

View File

@@ -1,6 +1,6 @@
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -23,6 +23,14 @@ static ERR_STRING_DATA SM2_str_functs[] = {
{ERR_FUNC(SM2_F_O2I_SM2CIPHERTEXTVALUE), "o2i_SM2CiphertextValue"},
{ERR_FUNC(SM2_F_SM2CIPHERTEXTVALUE_SIZE), "SM2CiphertextValue_size"},
{ERR_FUNC(SM2_F_SM2_CIPHERTEXT_SIZE), "SM2_ciphertext_size"},
{ERR_FUNC(SM2_F_SM2_COSIGNER1_GENERATE_PROOF),
"SM2_cosigner1_generate_proof"},
{ERR_FUNC(SM2_F_SM2_COSIGNER1_GENERATE_SIGNATURE),
"SM2_cosigner1_generate_signature"},
{ERR_FUNC(SM2_F_SM2_COSIGNER1_SETUP), "SM2_cosigner1_setup"},
{ERR_FUNC(SM2_F_SM2_COSIGNER2_GENERATE_PROOF),
"SM2_cosigner2_generate_proof"},
{ERR_FUNC(SM2_F_SM2_COSIGNER2_SETUP), "SM2_cosigner2_setup"},
{ERR_FUNC(SM2_F_SM2_DECRYPT), "SM2_decrypt"},
{ERR_FUNC(SM2_F_SM2_DO_DECRYPT), "SM2_do_decrypt"},
{ERR_FUNC(SM2_F_SM2_DO_ENCRYPT), "SM2_do_encrypt"},
@@ -47,6 +55,7 @@ static ERR_STRING_DATA SM2_str_reasons[] = {
{ERR_REASON(SM2_R_KDF_FAILURE), "kdf failure"},
{ERR_REASON(SM2_R_MISSING_PARAMETERS), "missing parameters"},
{ERR_REASON(SM2_R_NEED_NEW_SETUP_VALUES), "need new setup values"},
{ERR_REASON(SM2_R_NOT_IMPLEMENTED), "not implemented"},
{ERR_REASON(SM2_R_PLAINTEXT_TOO_LONG), "plaintext too long"},
{ERR_REASON(SM2_R_RANDOM_NUMBER_GENERATION_FAILED),
"random number generation failed"},

View File

@@ -98,3 +98,24 @@ struct sm2_kap_ctx_st {
int SM2_ciphertext_size(const EC_KEY *ec_key, size_t inlen);
struct SM2_COSIGNER1_SHARE_st {
BIGNUM *a;
BIGNUM *b;
};
struct SM2_COSIGNER2_SHARE_st {
BIGNUM *a;
BIGNUM *b;
};
struct SM2_COSIGNER1_PROOF_st {
BIGNUM *a;
BIGNUM *b;
};
struct SM2_COSIGNER2_PROOF_st {
BIGNUM *a;
BIGNUM *b;
};

View File

@@ -0,0 +1,79 @@
=pod
=encoding utf8
=head1 NAME
ECAHE_CIPHERTEXT_new, ECAHE_CIPHERTEXT_free,
ECAHE_do_encrypt, ECAHE_do_decrypt
ECAHE_ciphertext_add, ECAHE_ciphertext_sub, ECAHE_ciphertext_neg - ECAHE Algorithm
=head1 SYNOPSIS
#include <openssl/ecahe.h>
ECAHE_CIPHERTEXT *ECAHE_CIPHERTEXT_new(void);
void ECAHE_CIPHERTEXT_free(ECAHE_CIPHERTEXT *c);
int ECAHE_do_encrypt(ECAHE_CIPHERTEXT *c, const BIGNUM *m, EC_KEY *pk);
int ECAHE_do_decrypt(BIGNUM *m, const ECAHE_CIPHERTEXT *c, EC_KEY *sk);
int ECAHE_ciphertext_add(ECAHE_CIPHERTEXT *r,
const ECAHE_CIPHERTEXT *a,
const ECAHE_CIPHERTEXT *b,
EC_KEY *pk);
int ECAHE_ciphertext_sub(ECAHE_CIPHERTEXT *r,
const ECAHE_CIPHERTEXT *a,
const ECAHE_CIPHERTEXT *b,
EC_KEY *pk);
int ECAHE_ciphertext_neg(ECAHE_CIPHERTEXT *r,
const ECAHE_CIPHERTEXT *a,
EC_KEY *pk);
=head1 DESCRIPTION
Applications should use the higher level functions
L<EVP_DigestInit(3)> etc. instead of calling the hash
functions directly.
SM3 (ShangMi#3 Hash Algorithm) is a cryptographic hash function with a
256 bit output.
sm3() computes the SM3 message digest of the B<n>
bytes at B<d> and places it in B<md> (which must have space for
SHA_DIGEST_LENGTH == 20 bytes of output). If B<md> is NULL, the digest
is placed in a static array. Note: setting B<md> to NULL is B<not thread safe>.
The following functions may be used if the message is not completely
stored in memory:
sm3_nit() initializes a B<sm3_ctx_t> structure.
sm3_update() can be called repeatedly with chunks of the message to
be hashed (B<len> bytes at B<data>).
sm3_final() places the message digest in B<md>, which must have space
for SM3_DIGEST_LENGTH == 32 bytes of output, and erases the B<sm3_ctx_t>.
=head1 RETURN VALUES
sm3_init(), sm3_update(), sm3_final(), sm3_compress() and sm3() return void.
=head1 CONFORMING TO
GM/T 0004-2012 SM3 Cryptogrpahic Hash Algorithm.
=head1 SEE ALSO
L<EVP_DigestInit(3)>
=head1 COPYRIGHT
Copyright 2014-2019 The GmSSL Project. All Rights Reserved.
Licensed under the GmSSL license (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
L<http://gmssl.org/license.html>.
=cut

83
doc/crypto/ECRS_sign.pod Normal file
View File

@@ -0,0 +1,83 @@
=pod
=encoding utf8
=head1 NAME
ECRS_SIG_new, ECRS_SIG_free,
i2d_ECRS_SIG, d2i_ECRS_SIG,
ECRS_do_sign, ECRS_do_verify,
ECRS_size, ECRS_sign, ECRS_verify - EC Ring Signature Algorithm
=head1 SYNOPSIS
#include <openssl/ecrs.h>
ECRS_SIG *ECRS_SIG_new(void);
void ECRS_SIG_free(ECRS_SIG *sig);
int i2d_ECRS_SIG(const ECRS_SIG *sig, unsigned char **pp);
ECRS_SIG *d2i_ECRS_SIG(ECRS_SIG **sig, const unsigned char **pp, long len);
ECRS_SIG *ECRS_do_sign(const EVP_MD *md,
const unsigned char *dgst, int dgstlen,
STACK_OF(EC_KEY) *pub_keys, EC_KEY *ec_key);
int ECRS_do_verify(const EVP_MD *md, const unsigned char *dgst, int dgstlen,
const ECRS_SIG *sig, STACK_OF(EC_KEY) *pub_keys);
int ECRS_size(const EC_KEY *ec_key, int n);
int ECRS_sign(int type, const unsigned char *dgst, int dgstlen,
unsigned char *sig, unsigned int *siglen,
STACK_OF(EC_KEY) *pub_keys, EC_KEY *ec_key);
int ECRS_verify(int type, const unsigned char *dgst, int dgstlen,
const unsigned char *sig, int siglen,
STACK_OF(EC_KEY) *pub_keys);
=head1 DESCRIPTION
Applications should use the higher level functions
L<EVP_DigestInit(3)> etc. instead of calling the hash
functions directly.
SM3 (ShangMi#3 Hash Algorithm) is a cryptographic hash function with a
256 bit output.
sm3() computes the SM3 message digest of the B<n>
bytes at B<d> and places it in B<md> (which must have space for
SHA_DIGEST_LENGTH == 20 bytes of output). If B<md> is NULL, the digest
is placed in a static array. Note: setting B<md> to NULL is B<not thread safe>.
The following functions may be used if the message is not completely
stored in memory:
sm3_nit() initializes a B<sm3_ctx_t> structure.
sm3_update() can be called repeatedly with chunks of the message to
be hashed (B<len> bytes at B<data>).
sm3_final() places the message digest in B<md>, which must have space
for SM3_DIGEST_LENGTH == 32 bytes of output, and erases the B<sm3_ctx_t>.
=head1 RETURN VALUES
sm3_init(), sm3_update(), sm3_final(), sm3_compress() and sm3() return void.
=head1 CONFORMING TO
GM/T 0004-2012 SM3 Cryptogrpahic Hash Algorithm.
=head1 SEE ALSO
L<EVP_DigestInit(3)>
=head1 COPYRIGHT
Copyright 2014-2019 The GmSSL Project. All Rights Reserved.
Licensed under the GmSSL license (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
L<http://gmssl.org/license.html>.
=cut

View File

@@ -0,0 +1,63 @@
=pod
=encoding utf8
=head1 NAME
EVP_PKEY_CTX_set_paillier_keygen_bits,
EVP_PKEY_CTX_get_paillier_keygen_bits - Paillier EVP_PKEY ctrls
=head1 SYNOPSIS
#include <openssl/paillier.h>
int EVP_PKEY_CTX_set_paillier_keygen_bits(EVP_PKEY_CTX *ctx, int nbits);
int EVP_PKEY_CTX_get_paillier_keygen_bits(EVP_PKEY_CTX *ctx);
=head1 DESCRIPTION
Applications should use the higher level functions
L<EVP_DigestInit(3)> etc. instead of calling the hash
functions directly.
SM3 (ShangMi#3 Hash Algorithm) is a cryptographic hash function with a
256 bit output.
sm3() computes the SM3 message digest of the B<n>
bytes at B<d> and places it in B<md> (which must have space for
SHA_DIGEST_LENGTH == 20 bytes of output). If B<md> is NULL, the digest
is placed in a static array. Note: setting B<md> to NULL is B<not thread safe>.
The following functions may be used if the message is not completely
stored in memory:
sm3_nit() initializes a B<sm3_ctx_t> structure.
sm3_update() can be called repeatedly with chunks of the message to
be hashed (B<len> bytes at B<data>).
sm3_final() places the message digest in B<md>, which must have space
for SM3_DIGEST_LENGTH == 32 bytes of output, and erases the B<sm3_ctx_t>.
=head1 RETURN VALUES
sm3_init(), sm3_update(), sm3_final(), sm3_compress() and sm3() return void.
=head1 CONFORMING TO
GM/T 0004-2012 SM3 Cryptogrpahic Hash Algorithm.
=head1 SEE ALSO
L<EVP_DigestInit(3)>
=head1 COPYRIGHT
Copyright 2014-2019 The GmSSL Project. All Rights Reserved.
Licensed under the GmSSL license (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
L<http://gmssl.org/license.html>.
=cut

View File

@@ -0,0 +1,72 @@
=pod
=encoding utf8
=head1 NAME
FFX_CTX_new, FFX_CTX_free, FFX_init,
FFX_encrypt, FFX_decrypt, FFX_compute_luhn - Format-Preserving Encryption
=head1 SYNOPSIS
#include <openssl/ffx.h>
FFX_CTX *FFX_CTX_new(void);
void FFX_CTX_free(FFX_CTX *ctx);
int FFX_init(FFX_CTX *ctx, const EVP_CIPHER *cipher,
const unsigned char *key, int flag);
int FFX_encrypt(FFX_CTX *ctx, const char *in, char *out, size_t iolen,
unsigned char *tweak, size_t tweaklen);
int FFX_decrypt(FFX_CTX *ctx, const char *in, char *out, size_t iolen,
unsigned char *tweak, size_t tweaklen);
int FFX_compute_luhn(const char *in, size_t inlen);
=head1 DESCRIPTION
Applications should use the higher level functions
L<EVP_DigestInit(3)> etc. instead of calling the hash
functions directly.
SM3 (ShangMi#3 Hash Algorithm) is a cryptographic hash function with a
256 bit output.
sm3() computes the SM3 message digest of the B<n>
bytes at B<d> and places it in B<md> (which must have space for
SHA_DIGEST_LENGTH == 20 bytes of output). If B<md> is NULL, the digest
is placed in a static array. Note: setting B<md> to NULL is B<not thread safe>.
The following functions may be used if the message is not completely
stored in memory:
sm3_nit() initializes a B<sm3_ctx_t> structure.
sm3_update() can be called repeatedly with chunks of the message to
be hashed (B<len> bytes at B<data>).
sm3_final() places the message digest in B<md>, which must have space
for SM3_DIGEST_LENGTH == 32 bytes of output, and erases the B<sm3_ctx_t>.
=head1 RETURN VALUES
sm3_init(), sm3_update(), sm3_final(), sm3_compress() and sm3() return void.
=head1 CONFORMING TO
GM/T 0004-2012 SM3 Cryptogrpahic Hash Algorithm.
=head1 SEE ALSO
L<EVP_DigestInit(3)>
=head1 COPYRIGHT
Copyright 2014-2019 The GmSSL Project. All Rights Reserved.
Licensed under the GmSSL license (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
L<http://gmssl.org/license.html>.
=cut

View File

@@ -0,0 +1,74 @@
=pod
=encoding utf8
=head1 NAME
OTP_generate - One-Time Password Algorithm
=head1 SYNOPSIS
#include <openssl/otp.h>
typedef struct OTP_PARAMS_st {
int type;
int te;
void *option;
size_t option_size;
int otp_digits;
/* adjust the clock in seconds */
int offset;
} OTP_PARAMS;
int OTP_generate(const OTP_PARAMS *params,
const void *event, size_t eventlen,
unsigned int *otp,
const unsigned char *key, size_t keylen);
=head1 DESCRIPTION
Applications should use the higher level functions
L<EVP_DigestInit(3)> etc. instead of calling the hash
functions directly.
SM3 (ShangMi#3 Hash Algorithm) is a cryptographic hash function with a
256 bit output.
sm3() computes the SM3 message digest of the B<n>
bytes at B<d> and places it in B<md> (which must have space for
SHA_DIGEST_LENGTH == 20 bytes of output). If B<md> is NULL, the digest
is placed in a static array. Note: setting B<md> to NULL is B<not thread safe>.
The following functions may be used if the message is not completely
stored in memory:
sm3_nit() initializes a B<sm3_ctx_t> structure.
sm3_update() can be called repeatedly with chunks of the message to
be hashed (B<len> bytes at B<data>).
sm3_final() places the message digest in B<md>, which must have space
for SM3_DIGEST_LENGTH == 32 bytes of output, and erases the B<sm3_ctx_t>.
=head1 RETURN VALUES
sm3_init(), sm3_update(), sm3_final(), sm3_compress() and sm3() return void.
=head1 CONFORMING TO
GM/T 0004-2012 SM3 Cryptogrpahic Hash Algorithm.
=head1 SEE ALSO
L<EVP_DigestInit(3)>
=head1 COPYRIGHT
Copyright 2014-2019 The GmSSL Project. All Rights Reserved.
Licensed under the GmSSL license (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
L<http://gmssl.org/license.html>.
=cut

View File

@@ -0,0 +1,90 @@
=pod
=encoding utf8
=head1 NAME
PAILLIER_new, PAILLIER_free,
i2d_PaillierPrivateKey, d2i_PaillierPrivateKey,
i2d_PaillierPublicKey, d2i_PaillierPublicKey,
PAILLIER_size, PAILLIER_security_bits
PAILLIER_generate_key, PAILLIER_check_key,
PAILLIER_encrypt, PAILLIER_decrypt,
PAILLIER_ciphertext_add, PAILLIER_ciphertext_scalar_mul,
PAILLIER_up_ref - Paillier Additive Homomorphic Encryption
=head1 SYNOPSIS
#include <openssl/paillier.h>
PAILLIER *PAILLIER_new(void);
void PAILLIER_free(PAILLIER *key);
int i2d_PaillierPrivateKey(const PaillierPrivateKey *sk, unsigned char **pp);
PaillierPrivateKey *d2i_PaillierPrivateKey(PaillierPrivateKey **sk,
const unsigned char **pp, long len);
int i2d_PaillierPublicKey(const PaillierPublicKey *pk, unsigned char **pp);
PaillierPublicKey *d2i_PaillierPublicKey(PaillierPublicKey **pk,
const unsigned char **pp, long len);
int PAILLIER_size(const PAILLIER *key);
int PAILLIER_security_bits(const PAILLIER *key);
int PAILLIER_generate_key(PAILLIER *key, int bits/* as RSA N */);
int PAILLIER_check_key(PAILLIER *key);
int PAILLIER_encrypt(BIGNUM *out, const BIGNUM *in, PAILLIER *key);
int PAILLIER_decrypt(BIGNUM *out, const BIGNUM *in, PAILLIER *key);
int PAILLIER_ciphertext_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, PAILLIER *key);
int PAILLIER_ciphertext_scalar_mul(BIGNUM *r, const BIGNUM *scalar, const BIGNUM *a, PAILLIER *key);
int PAILLIER_up_ref(PAILLIER *key);
=head1 DESCRIPTION
Applications should use the higher level functions
L<EVP_DigestInit(3)> etc. instead of calling the hash
functions directly.
SM3 (ShangMi#3 Hash Algorithm) is a cryptographic hash function with a
256 bit output.
sm3() computes the SM3 message digest of the B<n>
bytes at B<d> and places it in B<md> (which must have space for
SHA_DIGEST_LENGTH == 20 bytes of output). If B<md> is NULL, the digest
is placed in a static array. Note: setting B<md> to NULL is B<not thread safe>.
The following functions may be used if the message is not completely
stored in memory:
sm3_nit() initializes a B<sm3_ctx_t> structure.
sm3_update() can be called repeatedly with chunks of the message to
be hashed (B<len> bytes at B<data>).
sm3_final() places the message digest in B<md>, which must have space
for SM3_DIGEST_LENGTH == 32 bytes of output, and erases the B<sm3_ctx_t>.
=head1 RETURN VALUES
sm3_init(), sm3_update(), sm3_final(), sm3_compress() and sm3() return void.
=head1 CONFORMING TO
GM/T 0004-2012 SM3 Cryptogrpahic Hash Algorithm.
=head1 SEE ALSO
L<EVP_DigestInit(3)>
=head1 COPYRIGHT
Copyright 2014-2019 The GmSSL Project. All Rights Reserved.
Licensed under the GmSSL license (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
L<http://gmssl.org/license.html>.
=cut

View File

@@ -0,0 +1,42 @@
=pod
=encoding utf8
=head1 NAME
SM9_MASTER_KEY_new, SM9_MASTER_KEY_free, SM9_KEY_new, SM9_KEY_free - SM9 Algorithm
=head1 SYNOPSIS
#include <openssl/sm9.h>
SM9_MASTER_KEY *SM9_MASTER_KEY_new(void);
void SM9_MASTER_KEY_free(SM9_MASTER_KEY *a);
SM9_KEY *SM9_KEY_new(void);
void SM9_KEY_free(SM9_KEY *a);
=head1 DESCRIPTION
=head1 RETURN VALUES
=head1 CONFORMING TO
GM/T 0044-2016 SM9 Identification Cryptographic Algorithm
=head1 SEE ALSO
L<EVP_DigestInit(3)>
=head1 COPYRIGHT
Copyright 2014-2019 The GmSSL Project. All Rights Reserved.
Licensed under the GmSSL license (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
L<http://gmssl.org/license.html>.
=cut

49
doc/crypto/SM9_setup.pod Normal file
View File

@@ -0,0 +1,49 @@
=pod
=encoding utf8
=head1 NAME
SM9_setup, SM9_generate_master_secret, SM9_extract_public_parameters,
SM9_extract_private_key, SM9_extract_public_key - SM9 Algorithm
=head1 SYNOPSIS
#include <openssl/sm9.h>
int SM9_setup(int pairing, int scheme, int hash1,
SM9PublicParameters **mpk, SM9MasterSecret **msk);
SM9MasterSecret *SM9_generate_master_secret(int pairing, int scheme, int hash1);
SM9PublicParameters *SM9_extract_public_parameters(SM9MasterSecret *msk);
SM9PrivateKey *SM9_extract_private_key(SM9MasterSecret *msk,
const char *id, size_t idlen);
SM9PublicKey *SM9_extract_public_key(SM9PublicParameters *mpk,
const char *id, size_t idlen);
=head1 DESCRIPTION
=head1 RETURN VALUES
=head1 CONFORMING TO
GM/T 0044-2016 SM9 Identification Cryptographic Algorithm
=head1 SEE ALSO
L<EVP_DigestInit(3)>
=head1 COPYRIGHT
Copyright 2014-2019 The GmSSL Project. All Rights Reserved.
Licensed under the GmSSL license (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
L<http://gmssl.org/license.html>.
=cut

View File

@@ -0,0 +1,63 @@
=pod
=encoding utf8
=head1 NAME
ZUC_set_key, ZUC_generate_keystream, ZUC_generate_keyword - ZUC Stream Cipher
=head1 SYNOPSIS
#include <openssl/zuc.h>
void ZUC_set_key(ZUC_KEY *key, const unsigned char *user_key, const unsigned char *iv);
void ZUC_generate_keystream(ZUC_KEY *key, size_t nwords, uint32_t *words);
uint32_t ZUC_generate_keyword(ZUC_KEY *key);
=head1 DESCRIPTION
Applications should use the higher level functions
L<EVP_DigestInit(3)> etc. instead of calling the hash
functions directly.
SM3 (ShangMi#3 Hash Algorithm) is a cryptographic hash function with a
256 bit output.
sm3() computes the SM3 message digest of the B<n>
bytes at B<d> and places it in B<md> (which must have space for
SHA_DIGEST_LENGTH == 20 bytes of output). If B<md> is NULL, the digest
is placed in a static array. Note: setting B<md> to NULL is B<not thread safe>.
The following functions may be used if the message is not completely
stored in memory:
sm3_nit() initializes a B<sm3_ctx_t> structure.
sm3_update() can be called repeatedly with chunks of the message to
be hashed (B<len> bytes at B<data>).
sm3_final() places the message digest in B<md>, which must have space
for SM3_DIGEST_LENGTH == 32 bytes of output, and erases the B<sm3_ctx_t>.
=head1 RETURN VALUES
sm3_init(), sm3_update(), sm3_final(), sm3_compress() and sm3() return void.
=head1 CONFORMING TO
GM/T 0004-2012 SM3 Cryptogrpahic Hash Algorithm.
=head1 SEE ALSO
L<EVP_DigestInit(3)>
=head1 COPYRIGHT
Copyright 2014-2019 The GmSSL Project. All Rights Reserved.
Licensed under the GmSSL license (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
L<http://gmssl.org/license.html>.
=cut

View File

@@ -0,0 +1,62 @@
=pod
=encoding utf8
=head1 NAME
sm3_hmac_init, sm3_hmac_update, sm3_hmac_final, sm3_hmac - SM3 Hash Algorithm
=head1 SYNOPSIS
#include <openssl/sm3.h>
void sm3_hmac_init(sm3_hmac_ctx_t *ctx, const unsigned char *key, size_t key_len);
void sm3_hmac_update(sm3_hmac_ctx_t *ctx, const unsigned char *data, size_t data_len);
void sm3_hmac_final(sm3_hmac_ctx_t *ctx, unsigned char mac[SM3_HMAC_SIZE]);
void sm3_hmac(const unsigned char *data, size_t data_len,
const unsigned char *key, size_t key_len, unsigned char mac[SM3_HMAC_SIZE]);
=head1 DESCRIPTION
Applications should use the higher level functions
L<HMAC_Init(3)> etc. instead of calling the hash
functions directly.
sm3_hmac() computes the SM3 message digest of the B<n>
bytes at B<d> and places it in B<md> (which must have space for
SHA_DIGEST_LENGTH == 20 bytes of output). If B<md> is NULL, the digest
is placed in a static array. Note: setting B<md> to NULL is B<not thread safe>.
The following functions may be used if the message is not completely
stored in memory:
sm3_hmac_init() initializes a B<sm3_ctx_t> structure.
sm3_hmac_update() can be called repeatedly with chunks of the message to
be hashed (B<len> bytes at B<data>).
sm3_hmac_final() places the message digest in B<md>, which must have space
for SM3_DIGEST_LENGTH == 32 bytes of output, and erases the B<sm3_hmac_ctx_t>.
=head1 RETURN VALUES
sm3_init(), sm3_update(), sm3_final(), sm3_compress() and sm3() return void.
=head1 CONFORMING TO
GM/T 0004-2012 SM3 Cryptogrpahic Hash Algorithm.
=head1 SEE ALSO
L<HMAC_Init(3)>
=head1 COPYRIGHT
Copyright 2014-2019 The GmSSL Project. All Rights Reserved.
Licensed under the GmSSL license (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
L<http://gmssl.org/license.html>.
=cut

67
doc/crypto/sm3_init.pod Normal file
View File

@@ -0,0 +1,67 @@
=pod
=encoding utf8
=head1 NAME
sm3_init, sm3_update, sm3_final, sm3_compress, sm3 - SM3 Hash Algorithm
=head1 SYNOPSIS
#include <openssl/sm3.h>
void sm3_init(sm3_ctx_t *ctx);
void sm3_update(sm3_ctx_t *ctx, const unsigned char* data, size_t data_len);
void sm3_final(sm3_ctx_t *ctx, unsigned char digest[SM3_DIGEST_LENGTH]);
void sm3_compress(uint32_t digest[8], const unsigned char block[SM3_BLOCK_SIZE]);
void sm3(const unsigned char *data, size_t datalen,
unsigned char digest[SM3_DIGEST_LENGTH]);
=head1 DESCRIPTION
Applications should use the higher level functions
L<EVP_DigestInit(3)> etc. instead of calling the hash
functions directly.
SM3 (ShangMi#3 Hash Algorithm) is a cryptographic hash function with a
256 bit output.
sm3() computes the SM3 message digest of the B<n>
bytes at B<d> and places it in B<md> (which must have space for
SHA_DIGEST_LENGTH == 20 bytes of output). If B<md> is NULL, the digest
is placed in a static array. Note: setting B<md> to NULL is B<not thread safe>.
The following functions may be used if the message is not completely
stored in memory:
sm3_nit() initializes a B<sm3_ctx_t> structure.
sm3_update() can be called repeatedly with chunks of the message to
be hashed (B<len> bytes at B<data>).
sm3_final() places the message digest in B<md>, which must have space
for SM3_DIGEST_LENGTH == 32 bytes of output, and erases the B<sm3_ctx_t>.
=head1 RETURN VALUES
sm3_init(), sm3_update(), sm3_final(), sm3_compress() and sm3() return void.
=head1 CONFORMING TO
GM/T 0004-2012 SM3 Cryptogrpahic Hash Algorithm.
=head1 SEE ALSO
L<EVP_DigestInit(3)>
=head1 COPYRIGHT
Copyright 2014-2019 The GmSSL Project. All Rights Reserved.
Licensed under the GmSSL license (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
L<http://gmssl.org/license.html>.
=cut

View File

@@ -0,0 +1,92 @@
=pod
=encoding utf8
=head1 NAME
sms4_set_encrypt_key, sms4_set_decrypt_key,
sms4_encrypt, sms4_decrypt,
sms4_encrypt_init, sms4_encrypt_8blocks, sms4_encrypt_16blocks,
sms4_ecb_encrypt, sms4_cbc_encrypt,
sms4_cfb128_encrypt, sms4_ofb128_encrypt, sms4_ctr128_encrypt,
sms4_wrap_key, sms4_unwrap_key - SM4 Block Cipher
=head1 SYNOPSIS
#include <openssl/sms4.h>
void sms4_set_encrypt_key(sms4_key_t *key, const unsigned char *user_key);
void sms4_set_decrypt_key(sms4_key_t *key, const unsigned char *user_key);
void sms4_encrypt(const unsigned char *in, unsigned char *out, const sms4_key_t *key);
#define sms4_decrypt(in,out,key) sms4_encrypt(in,out,key)
void sms4_encrypt_init(sms4_key_t *key);
void sms4_encrypt_8blocks(const unsigned char *in, unsigned char *out, const sms4_key_t *key);
void sms4_encrypt_16blocks(const unsigned char *in, unsigned char *out, const sms4_key_t *key);
void sms4_ecb_encrypt(const unsigned char *in, unsigned char *out,
const sms4_key_t *key, int enc);
void sms4_cbc_encrypt(const unsigned char *in, unsigned char *out,
size_t len, const sms4_key_t *key, unsigned char *iv, int enc);
void sms4_cfb128_encrypt(const unsigned char *in, unsigned char *out,
size_t len, const sms4_key_t *key, unsigned char *iv, int *num, int enc);
void sms4_ofb128_encrypt(const unsigned char *in, unsigned char *out,
size_t len, const sms4_key_t *key, unsigned char *iv, int *num);
void sms4_ctr128_encrypt(const unsigned char *in, unsigned char *out,
size_t len, const sms4_key_t *key, unsigned char *iv,
unsigned char ecount_buf[SMS4_BLOCK_SIZE], unsigned int *num);
int sms4_wrap_key(sms4_key_t *key, const unsigned char *iv,
unsigned char *out, const unsigned char *in, unsigned int inlen);
int sms4_unwrap_key(sms4_key_t *key, const unsigned char *iv,
unsigned char *out, const unsigned char *in, unsigned int inlen);
=head1 DESCRIPTION
Applications should use the higher level functions
L<EVP_DigestInit(3)> etc. instead of calling the hash
functions directly.
SM3 (ShangMi#3 Hash Algorithm) is a cryptographic hash function with a
256 bit output.
sm3() computes the SM3 message digest of the B<n>
bytes at B<d> and places it in B<md> (which must have space for
SHA_DIGEST_LENGTH == 20 bytes of output). If B<md> is NULL, the digest
is placed in a static array. Note: setting B<md> to NULL is B<not thread safe>.
The following functions may be used if the message is not completely
stored in memory:
sm3_nit() initializes a B<sm3_ctx_t> structure.
sm3_update() can be called repeatedly with chunks of the message to
be hashed (B<len> bytes at B<data>).
sm3_final() places the message digest in B<md>, which must have space
for SM3_DIGEST_LENGTH == 32 bytes of output, and erases the B<sm3_ctx_t>.
=head1 RETURN VALUES
sm3_init(), sm3_update(), sm3_final(), sm3_compress() and sm3() return void.
=head1 CONFORMING TO
GM/T 0004-2012 SM3 Cryptogrpahic Hash Algorithm.
=head1 SEE ALSO
L<EVP_DigestInit(3)>
=head1 COPYRIGHT
Copyright 2014-2019 The GmSSL Project. All Rights Reserved.
Licensed under the GmSSL license (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
L<http://gmssl.org/license.html>.
=cut

View File

@@ -51,7 +51,7 @@
#define HEADER_BYTEORDER_H
#ifdef CPU_BIGENDIAN
#ifdef B_ENDIAN
#define cpu_to_be16(v) (v)
#define cpu_to_be32(v) (v)

View File

@@ -500,6 +500,8 @@ BIGNUM *BN_get_rfc3526_prime_8192(BIGNUM *bn);
int BN_bntest_rand(BIGNUM *rnd, int bits, int top, int bottom);
DEFINE_STACK_OF(BIGNUM)
/* BEGIN ERROR CODES */
/*
* The following lines are auto generated by the script mkerr.pl. Any changes

View File

@@ -1365,6 +1365,9 @@ void EC_KEY_METHOD_get_verify(EC_KEY_METHOD *meth,
# define EVP_PKEY_ECDH_KDF_NONE 1
# define EVP_PKEY_ECDH_KDF_X9_62 2
DEFINE_STACK_OF(EC_KEY)
STACK_OF(EC_KEY) *EC_KEY_split(EC_KEY *ec_key, int k, int n);
EC_KEY *EC_KEY_merge(STACK_OF(EC_KEY) *ec_keys);
/* BEGIN ERROR CODES */
/*
@@ -1383,6 +1386,9 @@ int ERR_load_EC_strings(void);
# define EC_F_D2I_ECPKPARAMETERS 103
# define EC_F_D2I_ECPRIVATEKEY 104
# define EC_F_DO_EC_KEY_PRINT 105
# define EC_F_ECAHE_CIPHERTEXT_SIZE 286
# define EC_F_ECAHE_DECRYPT 287
# define EC_F_ECAHE_ENCRYPT 288
# define EC_F_ECDH_CMS_DECRYPT 106
# define EC_F_ECDH_CMS_SET_SHARED_INFO 107
# define EC_F_ECDH_COMPUTE_KEY 108
@@ -1491,6 +1497,7 @@ int ERR_load_EC_strings(void);
# define EC_F_EC_KEY_CHECK_KEY 208
# define EC_F_EC_KEY_COPY 209
# define EC_F_EC_KEY_GENERATE_KEY 210
# define EC_F_EC_KEY_MERGE 285
# define EC_F_EC_KEY_NEW_METHOD 211
# define EC_F_EC_KEY_OCT2PRIV 212
# define EC_F_EC_KEY_PRINT_FP 213
@@ -1499,6 +1506,7 @@ int ERR_load_EC_strings(void);
# define EC_F_EC_KEY_SIMPLE_CHECK_KEY 216
# define EC_F_EC_KEY_SIMPLE_OCT2PRIV 217
# define EC_F_EC_KEY_SIMPLE_PRIV2OCT 218
# define EC_F_EC_KEY_SPLIT 284
# define EC_F_EC_POINTS_MAKE_AFFINE 219
# define EC_F_EC_POINT_ADD 220
# define EC_F_EC_POINT_CMP 221
@@ -1627,6 +1635,7 @@ int ERR_load_EC_strings(void);
# define EC_R_INVALID_SM2_ID 161
# define EC_R_INVALID_SM2_KAP_CHECKSUM_LENGTH 162
# define EC_R_INVALID_SM2_KAP_CHECKSUM_VALUE 163
# define EC_R_INVALID_SPLIT_PARAMETER 198
# define EC_R_INVALID_TRINOMIAL_BASIS 164
# define EC_R_INVALID_TYPE1CURVE 165
# define EC_R_INVALID_TYPE1_CURVE 166

74
include/openssl/ecahe.h Normal file
View File

@@ -0,0 +1,74 @@
/* ====================================================================
* Copyright (c) 2016 - 2019 The GmSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the GmSSL Project.
* (http://gmssl.org/)"
*
* 4. The name "GmSSL Project" must not be used to endorse or promote
* products derived from this software without prior written
* permission. For written permission, please contact
* guanzhi1980@gmail.com.
*
* 5. Products derived from this software may not be called "GmSSL"
* nor may "GmSSL" appear in their names without prior written
* permission of the GmSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the GmSSL Project
* (http://gmssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*/
#ifndef HEADER_ECAHE_H
#define HEADER_ECAHE_H
#include <openssl/bn.h>
#include <openssl/ec.h>
#include <openssl/asn1.h>
#include <openssl/asn1t.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct ECAHE_CIPHERTEXT_st ECAHE_CIPHERTEXT;
DECLARE_ASN1_FUNCTIONS(ECAHE_CIPHERTEXT)
int ECAHE_do_encrypt(ECAHE_CIPHERTEXT *c, const BIGNUM *m, EC_KEY *pk);
int ECAHE_do_decrypt(BIGNUM *m, const ECAHE_CIPHERTEXT *c, EC_KEY *sk);
int ECAHE_ciphertext_add(ECAHE_CIPHERTEXT *r, const ECAHE_CIPHERTEXT *a, const ECAHE_CIPHERTEXT *b, EC_KEY *pk);
int ECAHE_ciphertext_sub(ECAHE_CIPHERTEXT *r, const ECAHE_CIPHERTEXT *a, const ECAHE_CIPHERTEXT *b, EC_KEY *pk);
int ECAHE_ciphertext_neg(ECAHE_CIPHERTEXT *r, const ECAHE_CIPHERTEXT *a, EC_KEY *pk);
#ifdef __cplusplus
}
#endif
#endif

112
include/openssl/ecrs.h Normal file
View File

@@ -0,0 +1,112 @@
/* ====================================================================
* Copyright (c) 2014 - 2019 The GmSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the GmSSL Project.
* (http://gmssl.org/)"
*
* 4. The name "GmSSL Project" must not be used to endorse or promote
* products derived from this software without prior written
* permission. For written permission, please contact
* guanzhi1980@gmail.com.
*
* 5. Products derived from this software may not be called "GmSSL"
* nor may "GmSSL" appear in their names without prior written
* permission of the GmSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the GmSSL Project
* (http://gmssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*/
#ifndef HEADER_ECRS_H
#define HEADER_ECRS_H
#include <openssl/opensslconf.h>
#ifndef OPENSSL_NO_ECRS
#include <openssl/ec.h>
#include <openssl/evp.h>
#include <openssl/asn1.h>
#include <openssl/asn1t.h>
#include <openssl/stack.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct ECRS_SIG_st ECRS_SIG;
DECLARE_ASN1_FUNCTIONS(ECRS_SIG)
int ECRS_size(const EC_KEY *ec_key, int n);
ECRS_SIG *ECRS_do_sign(const EVP_MD *md, const unsigned char *dgst,
int dgstlen, STACK_OF(EC_KEY) *pub_keys, EC_KEY *ec_key);
int ECRS_do_verify(const EVP_MD *md, const unsigned char *dgst, int dgstlen,
const ECRS_SIG *sig, STACK_OF(EC_KEY) *pub_keys);
int ECRS_sign(int type, const unsigned char *dgst, int dgstlen,
unsigned char *sig, unsigned int *siglen, STACK_OF(EC_KEY) *pub_keys,
EC_KEY *ec_key);
int ECRS_verify(int type, const unsigned char *dgst, int dgstlen,
const unsigned char *sig, int siglen, STACK_OF(EC_KEY) *pub_keys);
/* BEGIN ERROR CODES */
/*
* The following lines are auto generated by the script mkerr.pl. Any changes
* made after this point may be overwritten when the script is next run.
*/
int ERR_load_ECRS_strings(void);
/* Error codes for the ECRS functions. */
/* Function codes. */
# define ECRS_F_ECRS_DO_SIGN 100
# define ECRS_F_ECRS_DO_VERIFY 103
# define ECRS_F_ECRS_SIGN 101
# define ECRS_F_ECRS_VERIFY 102
/* Reason codes. */
# define ECRS_R_EC_KEY_NOT_MATCH 100
# define ECRS_R_INVALID_DIGEST_ALGOR 101
# define ECRS_R_NO_SIGNING_KEY 102
# define ECRS_R_PARSE_SIGNATURE_FAILURE 103
# define ECRS_R_PUBLIC_KEYS_NOT_MATCH 104
# define ECRS_R_PUBLIC_KEYS_NOT_MATCH_SIG 105
# ifdef __cplusplus
}
# endif
# endif
#endif

View File

@@ -108,6 +108,7 @@ typedef struct err_state_st {
# define ERR_LIB_SOF 65
# define ERR_LIB_SM2 66
# define ERR_LIB_BASE58 67
# define ERR_LIB_ECRS 68
# define ERR_LIB_USER 128
@@ -161,6 +162,7 @@ typedef struct err_state_st {
# define SKFerr(f,r) ERR_PUT_error(ERR_LIB_SKF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
# define SOFerr(f,r) ERR_PUT_error(ERR_LIB_SOF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
# define BASE58err(f,r) ERR_PUT_error(ERR_LIB_BASE58,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
# define ECRSerr(f,r) ERR_PUT_error(ERR_LIB_ECRS,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
# define ERR_PACK(l,f,r) ( \
(((unsigned int)(l) & 0x0FF) << 24L) | \
@@ -222,7 +224,8 @@ typedef struct err_state_st {
# define ERR_R_SDF_LIB ERR_LIB_SDF/* 63 */
# define ERR_R_SKF_LIB ERR_LIB_SKF/* 64 */
# define ERR_R_SOF_LIB ERR_LIB_SOF/* 65 */
# define ERR_R_BASE58_LIB ERR_LIB_BASE58/* 66 */
# define ERR_R_BASE58_LIB ERR_LIB_BASE58/* 67 */
# define ERR_R_ECRS_LIB ERR_LIB_ECRS/* 68 */
# define ERR_R_NESTED_ASN1_ERROR 58

View File

@@ -41,9 +41,9 @@ extern "C" {
*/
# define OPENSSL_VERSION_NUMBER 0x1010004fL
# ifdef OPENSSL_FIPS
# define OPENSSL_VERSION_TEXT "GmSSL 2.4.5 - OpenSSL 1.1.0d-fips 1 Feb 2019"
# define OPENSSL_VERSION_TEXT "GmSSL 2.5.0 - OpenSSL 1.1.0d-fips 28 Feb 2019"
# else
# define OPENSSL_VERSION_TEXT "GmSSL 2.4.5 - OpenSSL 1.1.0d 1 Feb 2019"
# define OPENSSL_VERSION_TEXT "GmSSL 2.5.0 - OpenSSL 1.1.0d 28 Feb 2019"
# endif
/*-

View File

@@ -245,6 +245,22 @@ void EC_KEY_METHOD_get_decrypt(EC_KEY_METHOD *meth,
EVP_PKEY_OP_ENCRYPT|EVP_PKEY_OP_DECRYPT, \
EVP_PKEY_CTRL_EC_ENCRYPT_PARAM, -2, NULL)
typedef struct SM2_COSIGNER1_SHARE_st SM2_COSIGNER1_SHARE;
typedef struct SM2_COSIGNER2_SHARE_st SM2_COSIGNER2_SHARE;
typedef struct SM2_COSIGNER1_PROOF_st SM2_COSIGNER1_PROOF;
typedef struct SM2_COSIGNER2_PROOF_st SM2_COSIGNER2_PROOF;
DECLARE_ASN1_FUNCTIONS(SM2_COSIGNER1_SHARE)
DECLARE_ASN1_FUNCTIONS(SM2_COSIGNER2_SHARE)
DECLARE_ASN1_FUNCTIONS(SM2_COSIGNER1_PROOF)
DECLARE_ASN1_FUNCTIONS(SM2_COSIGNER2_PROOF)
/* the following API not finished */
SM2_COSIGNER1_SHARE *SM2_cosigner1_setup(BIGNUM **k1, EC_KEY *ec_key, PAILLIER *pk);
SM2_COSIGNER2_SHARE *SM2_cosigner2_setup(const SM2_COSIGNER1_SHARE *s1, BIGNUM **k2, EC_KEY *ec_key, PAILLIER *pk);
SM2_COSIGNER1_PROOF *SM2_cosigner1_generate_proof(EC_KEY *ec_key, PAILLIER *pk);
SM2_COSIGNER2_PROOF *SM2_cosigner2_generate_proof(EC_KEY *ec_key, PAILLIER *pk);
ECDSA_SIG *SM2_cosigner1_generate_signature(EC_KEY *ec_key, PAILLIER *pk);
/* BEGIN ERROR CODES */
/*
@@ -261,6 +277,11 @@ int ERR_load_SM2_strings(void);
# define SM2_F_O2I_SM2CIPHERTEXTVALUE 108
# define SM2_F_SM2CIPHERTEXTVALUE_SIZE 109
# define SM2_F_SM2_CIPHERTEXT_SIZE 110
# define SM2_F_SM2_COSIGNER1_GENERATE_PROOF 111
# define SM2_F_SM2_COSIGNER1_GENERATE_SIGNATURE 112
# define SM2_F_SM2_COSIGNER1_SETUP 113
# define SM2_F_SM2_COSIGNER2_GENERATE_PROOF 114
# define SM2_F_SM2_COSIGNER2_SETUP 115
# define SM2_F_SM2_DECRYPT 100
# define SM2_F_SM2_DO_DECRYPT 101
# define SM2_F_SM2_DO_ENCRYPT 102
@@ -283,6 +304,7 @@ int ERR_load_SM2_strings(void);
# define SM2_R_KDF_FAILURE 109
# define SM2_R_MISSING_PARAMETERS 111
# define SM2_R_NEED_NEW_SETUP_VALUES 112
# define SM2_R_NOT_IMPLEMENTED 115
# define SM2_R_PLAINTEXT_TOO_LONG 114
# define SM2_R_RANDOM_NUMBER_GENERATION_FAILED 113

236
npapi/GmSSLObject.c Normal file
View File

@@ -0,0 +1,236 @@
/* ====================================================================
* Copyright (c) 2016 - 2019 The GmSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the GmSSL Project.
* (http://gmssl.org/)"
*
* 4. The name "GmSSL Project" must not be used to endorse or promote
* products derived from this software without prior written
* permission. For written permission, please contact
* guanzhi1980@gmail.com.
*
* 5. Products derived from this software may not be called "GmSSL"
* nor may "GmSSL" appear in their names without prior written
* permission of the GmSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the GmSSL Project
* (http://gmssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/err.h>
#include <openssl/evp.h>
#include <openssl/pem.h>
#include <openssl/is_gmssl.h>
#include "GmSSLObject.h"
/*
* interface gmssl {
* readonly attribute DOMString version;
* DOMString encrypt(in DOMString algor, in DOMString plaintext, in DOMString public_key);
* DOMString decrypt(in DOMString algor, in DOMString ciphertext, in DOMString private_key);
* };
*/
const char *prog = "gmssl";
static bool identifiersInitialized = false;
#define GMSSL_VERSION "1.0"
#define GMSSL_PROPERTY_VERSION 0
#define GMSSL_NUM_PROPERTIES 1
static NPIdentifier gmsslPropertyIdentifiers[GMSSL_NUM_PROPERTIES];
static const NPUTF8 *gmsslPropertyNames[GMSSL_NUM_PROPERTIES] = {
"version",
};
#define GMSSL_METHOD_KEYGEN 0
#define GMSSL_METHOD_ENCRYPT 1
#define GMSSL_METHOD_DECRYPT 2
#define GMSSL_NUM_METHODS 3
static NPIdentifier gmsslMethodIdentifiers[GMSSL_NUM_METHODS];
static const NPUTF8 *gmsslMethodNames[GMSSL_NUM_METHODS] = {
"keygen",
"encrypt",
"decrypt",
};
static bool do_keygen(const NPVariant algor, NPVariant *result);
static bool do_encrypt(const NPVariant algor, const NPVariant plaintext, const NPVariant pubkey, NPVariant *result);
static bool do_decrypt(const NPVariant algor, const NPVariant ciphertext, const NPVariant privkey, NPVariant *result);
static NPObject *gmsslAllocate(NPP npp, NPClass *theClass)
{
GmSSLObject *newInstance = (GmSSLObject *)malloc(sizeof(GmSSLObject));
if (!identifiersInitialized) {
browser->getstringidentifiers(gmsslPropertyNames,
GMSSL_NUM_PROPERTIES, gmsslPropertyIdentifiers);
browser->getstringidentifiers(gmsslMethodNames,
GMSSL_NUM_METHODS, gmsslMethodIdentifiers);
identifiersInitialized = true;
}
return &newInstance->header;
}
static void gmsslDeallocate(NPObject *obj)
{
free(obj);
}
static void gmsslInvalidate(NPObject *obj)
{
}
static bool gmsslHasMethod(NPObject *obj, NPIdentifier name)
{
int i;
fprintf(stderr, "HashMethod(%s)\n", browser->utf8fromidentifier(name));
for (i = 0; i < GMSSL_NUM_METHODS; i++) {
if (name == gmsslMethodIdentifiers[i])
return true;
else
fprintf(stderr, "HashMethod(%s)\n", browser->utf8fromidentifier(name));
}
return false;
}
static bool gmsslInvoke(NPObject *obj, NPIdentifier name, const NPVariant *args,
uint32_t argCount, NPVariant *variant)
{
if (name == gmsslMethodIdentifiers[GMSSL_METHOD_KEYGEN]) {
if (argCount != 1) {
fprintf(stderr, "GmSSLObject: bad arguments\n");
return false;
}
return do_keygen(args[0], variant);
}
if (name == gmsslMethodIdentifiers[GMSSL_METHOD_ENCRYPT]) {
if (argCount != 3) {
fprintf(stderr, "%s: bad arguments", "prog");
return false;
}
return do_encrypt(args[0], args[1], args[2], variant);
}
if (name == gmsslMethodIdentifiers[GMSSL_METHOD_DECRYPT]) {
if (argCount != 3) {
fprintf(stderr, "%s: bad argument count\n", "prog");
return false;
}
return do_decrypt(args[0], args[1], args[2], variant);
}
return false;
}
static bool gmsslInvokeDefault(NPObject *obj, const NPVariant *args,
uint32_t argCount, NPVariant *result)
{
return false;
}
static bool gmsslHasProperty(NPObject *obj, NPIdentifier name)
{
int i;
for (i = 0; i < GMSSL_NUM_PROPERTIES; i++)
if (name == gmsslPropertyIdentifiers[i])
return true;
return false;
}
static bool gmsslGetProperty(NPObject *obj, NPIdentifier name, NPVariant *variant)
{
//GmSSLObject *gmsslObject = (GmSSLObject *)obj;
fprintf(stderr, "%s: cryptoGetProperty(%s)\n", prog, browser->utf8fromidentifier(name));
if (name == gmsslPropertyIdentifiers[GMSSL_PROPERTY_VERSION]) {
STRINGZ_TO_NPVARIANT(strdup(GMSSL_VERSION), *variant);
return true;
}
return false;
}
static bool gmsslSetProperty(NPObject *obj, NPIdentifier name,
const NPVariant *variant)
{
return false;
}
static NPClass gmsslClass = {
NP_CLASS_STRUCT_VERSION,
gmsslAllocate,
gmsslDeallocate,
gmsslInvalidate,
gmsslHasMethod,
gmsslInvoke,
gmsslInvokeDefault,
gmsslHasProperty,
gmsslGetProperty,
gmsslSetProperty,
};
NPClass *getGmSSLClass(void)
{
return &gmsslClass;
}
static bool do_keygen(const NPVariant algor, NPVariant *result)
{
bool ret = false;
return ret;
}
static bool do_encrypt(const NPVariant algor, const NPVariant plaintext,
const NPVariant pubkey, NPVariant *result)
{
bool ret = false;
return ret;
}
static bool do_decrypt(const NPVariant algor, const NPVariant ciphertext,
const NPVariant privkey, NPVariant *result)
{
bool ret = false;
return ret;
}

72
npapi/GmSSLObject.h Normal file
View File

@@ -0,0 +1,72 @@
/* ====================================================================
* Copyright (c) 2016 - 2019 The GmSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the GmSSL Project.
* (http://gmssl.org/)"
*
* 4. The name "GmSSL Project" must not be used to endorse or promote
* products derived from this software without prior written
* permission. For written permission, please contact
* guanzhi1980@gmail.com.
*
* 5. Products derived from this software may not be called "GmSSL"
* nor may "GmSSL" appear in their names without prior written
* permission of the GmSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the GmSSL Project
* (http://gmssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*/
#ifndef NPAPI_GMSSLOBJECT_H
#define NPAPI_GMSSLOBJECT_H
#include "npapi.h"
#include "npruntime.h"
#include "npfunctions.h"
#ifdef __cplusplus
extern "C" {
#endif
extern NPNetscapeFuncs* browser;
typedef struct GmSSLObject {
NPObject header;
} GmSSLObject;
NPClass *getGmSSLClass(void);
#ifdef __cplusplus
}
#endif
#endif

13
npapi/Makefile Normal file
View File

@@ -0,0 +1,13 @@
.PHONY: all clean install
all:
gcc -shared -Wall main.c PluginObject.c GmSSLObject.c -lcrypto -ldl -o libgmssl.so
clean:
rm -f *.o
rm -f *.so
install:
cp libgmssl.so /usr/lib/mozilla/plugins/

175
npapi/PluginObject.c Normal file
View File

@@ -0,0 +1,175 @@
/* ====================================================================
* Copyright (c) 2016 - 2019 The GmSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the GmSSL Project.
* (http://gmssl.org/)"
*
* 4. The name "GmSSL Project" must not be used to endorse or promote
* products derived from this software without prior written
* permission. For written permission, please contact
* guanzhi1980@gmail.com.
*
* 5. Products derived from this software may not be called "GmSSL"
* nor may "GmSSL" appear in their names without prior written
* permission of the GmSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the GmSSL Project
* (http://gmssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "PluginObject.h"
static bool identifiersInitialized = false;
#define PLUGIN_PROPERTY_GMSSL 0
#define PLUGIN_NUM_PROPERTIES 1
static NPIdentifier pluginPropertyIdentifiers[PLUGIN_NUM_PROPERTIES];
static const NPUTF8 *pluginPropertyNames[PLUGIN_NUM_PROPERTIES] = {
"gmssl",
};
#define PLUGIN_METHOD_GETTOKEN 0
#define PLUGIN_NUM_METHODS 1
static NPIdentifier pluginMethodIdentifiers[PLUGIN_NUM_METHODS];
static const NPUTF8 *pluginMethodNames[PLUGIN_NUM_METHODS] = {
"getToken"
};
static void initializeIdentifiers(void)
{
browser->getstringidentifiers(pluginPropertyNames,
PLUGIN_NUM_PROPERTIES, pluginPropertyIdentifiers);
browser->getstringidentifiers(pluginMethodNames,
PLUGIN_NUM_METHODS, pluginMethodIdentifiers);
}
bool pluginHasProperty(NPObject *obj, NPIdentifier name)
{
int i;
//fprintf(stderr, "pluginHasProperty(%s)\n", browser->utf8fromidentifier(name));
for (i = 0; i < PLUGIN_NUM_PROPERTIES; i++)
if (name == pluginPropertyIdentifiers[i])
return true;
return false;
}
bool pluginHasMethod(NPObject *obj, NPIdentifier name)
{
int i;
//fprintf(stderr, "pluginHasMethod(%s)\n", browser->utf8fromidentifier(name));
for (i = 0; i < PLUGIN_NUM_METHODS; i++)
if (name == pluginMethodIdentifiers[i])
return true;
return false;
}
bool pluginGetProperty(NPObject *obj, NPIdentifier name, NPVariant *variant)
{
PluginObject *plugin = (PluginObject *)obj;
//fprintf(stderr, "pluginGetProperty(%s)\n", browser->utf8fromidentifier(name));
if (name == pluginPropertyIdentifiers[PLUGIN_PROPERTY_GMSSL]) {
//fprintf(stderr, "webvision: get GmSSLObject\n");
NPObject *resultObj = &plugin->gmsslObject->header;
browser->retainobject(resultObj);
OBJECT_TO_NPVARIANT(resultObj, *variant);
return true;
}
return false;
}
bool pluginSetProperty(NPObject *obj, NPIdentifier name, const NPVariant *variant)
{
return false;
}
bool pluginInvoke(NPObject *obj, NPIdentifier name, const NPVariant *args, uint32_t argCount, NPVariant *result)
{
return false;
}
bool pluginInvokeDefault(NPObject *obj, const NPVariant *args, uint32_t argCount, NPVariant *result)
{
return false;
}
void pluginInvalidate(NPObject *obj)
{
// Release any remaining references to JavaScript objects.
}
NPObject *pluginAllocate(NPP npp, NPClass *theClass)
{
PluginObject *newInstance = malloc(sizeof(PluginObject));
//fprintf(stderr, "pluginAllocate()\n");
if (!identifiersInitialized) {
identifiersInitialized = true;
initializeIdentifiers();
}
newInstance->gmsslObject =
(GmSSLObject *)browser->createobject(npp, getGmSSLClass());
newInstance->npp = npp;
return &newInstance->header;
}
void pluginDeallocate(NPObject *obj)
{
free(obj);
}
static NPClass pluginClass = {
NP_CLASS_STRUCT_VERSION,
pluginAllocate,
pluginDeallocate,
pluginInvalidate,
pluginHasMethod,
pluginInvoke,
pluginInvokeDefault,
pluginHasProperty,
pluginGetProperty,
pluginSetProperty,
};
NPClass *getPluginClass(void)
{
return &pluginClass;
}

72
npapi/PluginObject.h Normal file
View File

@@ -0,0 +1,72 @@
/* ====================================================================
* Copyright (c) 2016 - 2019 The GmSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the GmSSL Project.
* (http://gmssl.org/)"
*
* 4. The name "GmSSL Project" must not be used to endorse or promote
* products derived from this software without prior written
* permission. For written permission, please contact
* guanzhi1980@gmail.com.
*
* 5. Products derived from this software may not be called "GmSSL"
* nor may "GmSSL" appear in their names without prior written
* permission of the GmSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the GmSSL Project
* (http://gmssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*/
#ifndef NPAPI_PLUGINOBJECT_H
#define NPAPI_PLUGINOBJECT_H
#include "GmSSLObject.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct PluginObject {
NPObject header;
NPP npp;
GmSSLObject *gmsslObject;
} PluginObject;
NPClass *getPluginClass(void);
#ifdef __cplusplus
}
#endif
#endif

20
npapi/example.html Normal file
View File

@@ -0,0 +1,20 @@
<html>
<head>
<title>GmSSL Plugin Test</title>
</head>
<body>
<h1>GmSSL Plugin Test</h1>
<hr>
<embed name="plugin" type="application/x-gmssl" id="plugin" width="0" height="0"></embed>
<br>
<script>
var gmssl = document.getElementById('plugin').gmssl;
document.write('GmSSL NPAPI Plugin Version: ' + gmssl.version + '<br><br>');
</script>
</body>
</html>

203
npapi/main.c Normal file
View File

@@ -0,0 +1,203 @@
/* ====================================================================
* Copyright (c) 2016 - 2019 The GmSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the GmSSL Project.
* (http://gmssl.org/)"
*
* 4. The name "GmSSL Project" must not be used to endorse or promote
* products derived from this software without prior written
* permission. For written permission, please contact
* guanzhi1980@gmail.com.
*
* 5. Products derived from this software may not be called "GmSSL"
* nor may "GmSSL" appear in their names without prior written
* permission of the GmSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the GmSSL Project
* (http://gmssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*/
#include "PluginObject.h"
#include <stdio.h>
#include <assert.h>
#define PLUGIN_NAME "GmSSL Plugin"
#define PLUGIN_DESCRIPTION "GmSSL NPAPI Plugin version 1.0"
#define PLUGIN_MIME "application/x-gmssl::GmSSL NPAPI Plugin"
NPNetscapeFuncs* browser;
NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc,
char* argn[], char* argv[], NPSavedData* saved)
{
if (browser->version >= 14)
instance->pdata = browser->createobject(instance, getPluginClass());
return NPERR_NO_ERROR;
}
NPError NPP_Destroy(NPP instance, NPSavedData** save)
{
return NPERR_NO_ERROR;
}
NPError NPP_SetWindow(NPP instance, NPWindow* window)
{
return NPERR_NO_ERROR;
}
NPError NPP_NewStream(NPP instance, NPMIMEType type, NPStream* stream,
NPBool seekable, uint16* stype)
{
*stype = NP_ASFILEONLY;
return NPERR_NO_ERROR;
}
NPError NPP_DestroyStream(NPP instance, NPStream* stream, NPReason reason)
{
return NPERR_NO_ERROR;
}
int32 NPP_WriteReady(NPP instance, NPStream* stream)
{
return 0;
}
int32 NPP_Write(NPP instance, NPStream* stream, int32 offset, int32 len,
void* buffer)
{
return 0;
}
void NPP_StreamAsFile(NPP instance, NPStream* stream, const char* fname)
{
}
void NPP_Print(NPP instance, NPPrint* platformPrint)
{
}
int16 NPP_HandleEvent(NPP instance, void* event)
{
return 0;
}
void NPP_URLNotify(NPP instance, const char* url, NPReason reason,
void* notifyData)
{
}
NPError NPP_GetValue(NPP instance, NPPVariable variable, void *value)
{
switch (variable) {
case NPPVpluginNameString:
*((char **)value) = PLUGIN_NAME;
return NPERR_NO_ERROR;
case NPPVpluginDescriptionString:
*((char **)value) = PLUGIN_DESCRIPTION;
return NPERR_NO_ERROR;
case NPPVpluginNeedsXEmbed:
*((NPBool *)value) = TRUE;
return NPERR_NO_ERROR;
case NPPVpluginScriptableNPObject:
assert(instance->pdata != NULL); /* this will not happen */
browser->retainobject((NPObject*)instance->pdata);
*((void **)value) = instance->pdata;
return NPERR_NO_ERROR;
default:
fprintf(stderr, "HcryptPlugin: %s() unknown value `%x'\n",
__FUNCTION__, variable);
return NPERR_GENERIC_ERROR;
}
return NPERR_GENERIC_ERROR;
}
NPError NPP_SetValue(NPP instance, NPNVariable variable, void *value)
{
return NPERR_GENERIC_ERROR;
}
NPError NP_GetValue(void* future, NPPVariable variable, void *value)
{
return NPP_GetValue(future, variable, value);
}
NPError NP_GetEntryPoints(NPPluginFuncs* pluginFuncs)
{
pluginFuncs->version = 11;
pluginFuncs->size = sizeof(pluginFuncs);
pluginFuncs->newp = NPP_New;
pluginFuncs->destroy = NPP_Destroy;
pluginFuncs->setwindow = NPP_SetWindow;
pluginFuncs->newstream = NPP_NewStream;
pluginFuncs->destroystream = NPP_DestroyStream;
pluginFuncs->asfile = NPP_StreamAsFile;
pluginFuncs->writeready = NPP_WriteReady;
pluginFuncs->write = (NPP_WriteProcPtr)NPP_Write;
pluginFuncs->print = NPP_Print;
pluginFuncs->event = NPP_HandleEvent;
pluginFuncs->urlnotify = NPP_URLNotify;
pluginFuncs->getvalue = NPP_GetValue;
pluginFuncs->setvalue = NPP_SetValue;
return NPERR_NO_ERROR;
}
NPError NP_Initialize(NPNetscapeFuncs* browserFuncs, NPPluginFuncs* pluginFuncs)
{
browser = browserFuncs;
NP_GetEntryPoints(pluginFuncs);
return NPERR_NO_ERROR;
}
char *NP_GetMIMEDescription(void)
{
return (char *)PLUGIN_MIME;
}
void NP_Shutdown(void)
{
}
#if 0
#pragma export on
NPError NP_Initialize(NPNetscapeFuncs* browserFuncs, NPPluginFuncs* pluginFuncs);
NPError NP_GetEntryPoints(NPPluginFuncs *pluginFuncs);
void NP_Shutdown(void);
#pragma export off
#endif

892
npapi/npapi.h Normal file
View File

@@ -0,0 +1,892 @@
/* ====================================================================
* Copyright (c) 2016 - 2019 The GmSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the GmSSL Project.
* (http://gmssl.org/)"
*
* 4. The name "GmSSL Project" must not be used to endorse or promote
* products derived from this software without prior written
* permission. For written permission, please contact
* guanzhi1980@gmail.com.
*
* 5. Products derived from this software may not be called "GmSSL"
* nor may "GmSSL" appear in their names without prior written
* permission of the GmSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the GmSSL Project
* (http://gmssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*/
#ifndef _NPAPI_H_
#define _NPAPI_H_
typedef int bool;
#define true 1
#define false 0
#ifdef INCLUDE_JAVA
#include "jri.h" /* Java Runtime Interface */
#else
#define jref void *
#define JRIEnv void
#endif
#ifdef _WIN32
# ifndef XP_WIN
# define XP_WIN 1
# endif /* XP_WIN */
#endif /* _WIN32 */
#ifdef __SYMBIAN32__
# ifndef XP_SYMBIAN
# define XP_SYMBIAN 1
# endif
#endif /* __SYMBIAN32__ */
#ifdef __MWERKS__
# define _declspec __declspec
# ifdef macintosh
# ifndef XP_MAC
# define XP_MAC 1
# endif /* XP_MAC */
# endif /* macintosh */
# ifdef __INTEL__
# ifndef XP_SYMBIAN
# undef NULL
# ifndef XP_WIN
# define XP_WIN 1
# endif /* XP_WIN */
# endif /* XP_SYMBIAN */
# endif /* __INTEL__ */
#endif /* __MWERKS__ */
#if defined(__APPLE_CC__) && !defined(__MACOS_CLASSIC__) && !defined(XP_UNIX)
# define XP_MACOSX
#endif
#ifdef XP_MAC
#include <Quickdraw.h>
#include <Events.h>
#endif
#if defined(XP_MACOSX) && defined(__LP64__)
#define NP_NO_QUICKDRAW
#define NP_NO_CARBON
#endif
#ifdef XP_MACOSX
#include <ApplicationServices/ApplicationServices.h>
#include <OpenGL/OpenGL.h>
#ifndef NP_NO_CARBON
#include <Carbon/Carbon.h>
#endif
#endif
#ifdef XP_UNIX
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <stdio.h>
#endif
#if defined(XP_SYMBIAN)
#include <QEvent>
#include <QRegion>
#endif
#ifdef XP_WIN
#include <windows.h>
#endif
/*----------------------------------------------------------------------*/
/* Plugin Version Constants */
/*----------------------------------------------------------------------*/
#define NP_VERSION_MAJOR 0
#define NP_VERSION_MINOR 24
/*----------------------------------------------------------------------*/
/* Definition of Basic Types */
/*----------------------------------------------------------------------*/
/* QNX sets the _INT16 and friends defines, but does not typedef the types */
#ifdef __QNXNTO__
#undef _UINT16
#undef _INT16
#undef _UINT32
#undef _INT32
#endif
#ifndef _UINT16
#define _UINT16
typedef unsigned short uint16;
#endif
#ifndef _UINT32
#define _UINT32
#ifdef __LP64__
typedef unsigned int uint32;
#else /* __LP64__ */
typedef unsigned long uint32;
#endif /* __LP64__ */
#endif
#ifndef _INT16
#define _INT16
typedef short int16;
#endif
#ifndef _INT32
#define _INT32
#ifdef __LP64__
typedef int int32;
#else /* __LP64__ */
typedef long int32;
#endif /* __LP64__ */
#endif
#ifndef FALSE
#define FALSE (0)
#endif
#ifndef TRUE
#define TRUE (1)
#endif
#ifndef NULL
#define NULL (0L)
#endif
typedef unsigned char NPBool;
typedef int16 NPError;
typedef int16 NPReason;
typedef char* NPMIMEType;
/*----------------------------------------------------------------------*/
/* Structures and definitions */
/*----------------------------------------------------------------------*/
#if !defined(__LP64__)
#if defined(XP_MAC) || defined(XP_MACOSX)
#pragma options align=mac68k
#endif
#endif /* __LP64__ */
/*
* NPP is a plug-in's opaque instance handle
*/
typedef struct _NPP
{
void* pdata; /* plug-in private data */
void* ndata; /* netscape private data */
} NPP_t;
typedef NPP_t* NPP;
typedef struct _NPStream
{
void* pdata; /* plug-in private data */
void* ndata; /* netscape private data */
const char* url;
uint32 end;
uint32 lastmodified;
void* notifyData;
const char* headers; /* Response headers from host.
* Exists only for >= NPVERS_HAS_RESPONSE_HEADERS.
* Used for HTTP only; NULL for non-HTTP.
* Available from NPP_NewStream onwards.
* Plugin should copy this data before storing it.
* Includes HTTP status line and all headers,
* preferably verbatim as received from server,
* headers formatted as in HTTP ("Header: Value"),
* and newlines (\n, NOT \r\n) separating lines.
* Terminated by \n\0 (NOT \n\n\0). */
} NPStream;
typedef struct _NPByteRange
{
int32 offset; /* negative offset means from the end */
uint32 length;
struct _NPByteRange* next;
} NPByteRange;
typedef struct _NPSavedData
{
int32 len;
void* buf;
} NPSavedData;
typedef struct _NPRect
{
uint16 top;
uint16 left;
uint16 bottom;
uint16 right;
} NPRect;
#ifdef XP_UNIX
/*
* Unix specific structures and definitions
*/
/*
* Callback Structures.
*
* These are used to pass additional platform specific information.
*/
enum {
NP_SETWINDOW = 1,
NP_PRINT
};
typedef struct
{
int32 type;
} NPAnyCallbackStruct;
typedef struct
{
int32 type;
Display* display;
Visual* visual;
Colormap colormap;
unsigned int depth;
} NPSetWindowCallbackStruct;
typedef struct
{
int32 type;
FILE* fp;
} NPPrintCallbackStruct;
#endif /* XP_UNIX */
/*
* The following masks are applied on certain platforms to NPNV and
* NPPV selectors that pass around pointers to COM interfaces. Newer
* compilers on some platforms may generate vtables that are not
* compatible with older compilers. To prevent older plugins from
* not understanding a new browser's ABI, these masks change the
* values of those selectors on those platforms. To remain backwards
* compatible with differenet versions of the browser, plugins can
* use these masks to dynamically determine and use the correct C++
* ABI that the browser is expecting. This does not apply to Windows
* as Microsoft's COM ABI will likely not change.
*/
#define NP_ABI_GCC3_MASK 0x10000000
/*
* gcc 3.x generated vtables on UNIX and OSX are incompatible with
* previous compilers.
*/
#if (defined (XP_UNIX) && defined(__GNUC__) && (__GNUC__ >= 3))
#define _NP_ABI_MIXIN_FOR_GCC3 NP_ABI_GCC3_MASK
#else
#define _NP_ABI_MIXIN_FOR_GCC3 0
#endif
#define NP_ABI_MACHO_MASK 0x01000000
/*
* On OSX, the Mach-O executable format is significantly
* different than CFM. In addition to having a different
* C++ ABI, it also has has different C calling convention.
* You must use glue code when calling between CFM and
* Mach-O C functions.
*/
#if (defined(TARGET_RT_MAC_MACHO))
#define _NP_ABI_MIXIN_FOR_MACHO NP_ABI_MACHO_MASK
#else
#define _NP_ABI_MIXIN_FOR_MACHO 0
#endif
#define NP_ABI_MASK (_NP_ABI_MIXIN_FOR_GCC3 | _NP_ABI_MIXIN_FOR_MACHO)
/*
* List of variable names for which NPP_GetValue shall be implemented
*/
typedef enum {
NPPVpluginNameString = 1,
NPPVpluginDescriptionString,
NPPVpluginWindowBool,
NPPVpluginTransparentBool,
NPPVjavaClass, /* Not implemented in WebKit */
NPPVpluginWindowSize, /* Not implemented in WebKit */
NPPVpluginTimerInterval, /* Not implemented in WebKit */
NPPVpluginScriptableInstance = (10 | NP_ABI_MASK), /* Not implemented in WebKit */
NPPVpluginScriptableIID = 11, /* Not implemented in WebKit */
/* 12 and over are available on Mozilla builds starting with 0.9.9 */
NPPVjavascriptPushCallerBool = 12, /* Not implemented in WebKit */
NPPVpluginKeepLibraryInMemory = 13, /* Not implemented in WebKit */
NPPVpluginNeedsXEmbed = 14, /* Not implemented in WebKit */
/* Get the NPObject for scripting the plugin. */
NPPVpluginScriptableNPObject = 15,
/* Get the plugin value (as \0-terminated UTF-8 string data) for
* form submission if the plugin is part of a form. Use
* NPN_MemAlloc() to allocate memory for the string data.
*/
NPPVformValue = 16, /* Not implemented in WebKit */
NPPVpluginUrlRequestsDisplayedBool = 17, /* Not implemented in WebKit */
/* Checks if the plugin is interested in receiving the http body of
* failed http requests (http status != 200).
*/
NPPVpluginWantsAllNetworkStreams = 18,
/* Checks to see if the plug-in would like the browser to load the "src" attribute. */
NPPVpluginCancelSrcStream = 20,
#ifdef XP_MACOSX
/* Used for negotiating drawing models */
NPPVpluginDrawingModel = 1000,
/* Used for negotiating event models */
NPPVpluginEventModel = 1001,
/* In the NPDrawingModelCoreAnimation drawing model, the browser asks the plug-in for a Core Animation layer. */
NPPVpluginCoreAnimationLayer = 1003
#endif
} NPPVariable;
/*
* List of variable names for which NPN_GetValue is implemented by Mozilla
*/
typedef enum {
NPNVxDisplay = 1,
NPNVxtAppContext,
NPNVnetscapeWindow,
NPNVjavascriptEnabledBool,
NPNVasdEnabledBool,
NPNVisOfflineBool,
/* 10 and over are available on Mozilla builds starting with 0.9.4 */
NPNVserviceManager = (10 | NP_ABI_MASK), /* Not implemented in WebKit */
NPNVDOMElement = (11 | NP_ABI_MASK), /* Not implemented in WebKit */
NPNVDOMWindow = (12 | NP_ABI_MASK), /* Not implemented in WebKit */
NPNVToolkit = (13 | NP_ABI_MASK), /* Not implemented in WebKit */
NPNVSupportsXEmbedBool = 14, /* Not implemented in WebKit */
/* Get the NPObject wrapper for the browser window. */
NPNVWindowNPObject = 15,
/* Get the NPObject wrapper for the plugins DOM element. */
NPNVPluginElementNPObject = 16,
NPNVSupportsWindowless = 17,
NPNVprivateModeBool = 18
#ifdef XP_MACOSX
, NPNVpluginDrawingModel = 1000 /* The NPDrawingModel specified by the plugin */
#ifndef NP_NO_QUICKDRAW
, NPNVsupportsQuickDrawBool = 2000 /* TRUE if the browser supports the QuickDraw drawing model */
#endif
, NPNVsupportsCoreGraphicsBool = 2001 /* TRUE if the browser supports the CoreGraphics drawing model */
, NPNVsupportsOpenGLBool = 2002 /* TRUE if the browser supports the OpenGL drawing model (CGL on Mac) */
, NPNVsupportsCoreAnimationBool = 2003 /* TRUE if the browser supports the CoreAnimation drawing model */
#ifndef NP_NO_CARBON
, NPNVsupportsCarbonBool = 3000 /* TRUE if the browser supports the Carbon event model */
#endif
, NPNVsupportsCocoaBool = 3001 /* TRUE if the browser supports the Cocoa event model */
#endif /* XP_MACOSX */
} NPNVariable;
typedef enum {
NPNURLVCookie = 501,
NPNURLVProxy
} NPNURLVariable;
/*
* The type of a NPWindow - it specifies the type of the data structure
* returned in the window field.
*/
typedef enum {
NPWindowTypeWindow = 1,
NPWindowTypeDrawable
} NPWindowType;
#ifdef XP_MACOSX
/*
* The drawing model for a Mac OS X plugin. These are the possible values for the NPNVpluginDrawingModel variable.
*/
typedef enum {
#ifndef NP_NO_QUICKDRAW
NPDrawingModelQuickDraw = 0,
#endif
NPDrawingModelCoreGraphics = 1,
NPDrawingModelOpenGL = 2,
NPDrawingModelCoreAnimation = 3
} NPDrawingModel;
/*
* The event model for a Mac OS X plugin. These are the possible values for the NPNVpluginEventModel variable.
*/
typedef enum {
#ifndef NP_NO_CARBON
NPEventModelCarbon = 0,
#endif
NPEventModelCocoa = 1,
} NPEventModel;
typedef enum {
NPCocoaEventDrawRect = 1,
NPCocoaEventMouseDown,
NPCocoaEventMouseUp,
NPCocoaEventMouseMoved,
NPCocoaEventMouseEntered,
NPCocoaEventMouseExited,
NPCocoaEventMouseDragged,
NPCocoaEventKeyDown,
NPCocoaEventKeyUp,
NPCocoaEventFlagsChanged,
NPCocoaEventFocusChanged,
NPCocoaEventWindowFocusChanged,
NPCocoaEventScrollWheel,
NPCocoaEventTextInput
} NPCocoaEventType;
typedef struct _NPNSString NPNSString;
typedef struct _NPNSWindow NPNSWindow;
typedef struct _NPNSMenu NPNSMenu;
typedef struct _NPCocoaEvent {
NPCocoaEventType type;
uint32 version;
union {
struct {
uint32 modifierFlags;
double pluginX;
double pluginY;
int32 buttonNumber;
int32 clickCount;
double deltaX;
double deltaY;
double deltaZ;
} mouse;
struct {
uint32 modifierFlags;
NPNSString *characters;
NPNSString *charactersIgnoringModifiers;
NPBool isARepeat;
uint16 keyCode;
} key;
struct {
CGContextRef context;
double x;
double y;
double width;
double height;
} draw;
struct {
NPBool hasFocus;
} focus;
struct {
NPNSString *text;
} text;
} data;
} NPCocoaEvent;
#endif
typedef struct _NPWindow
{
void* window; /* Platform specific window handle */
int32 x; /* Position of top left corner relative */
int32 y; /* to a netscape page. */
uint32 width; /* Maximum window size */
uint32 height;
NPRect clipRect; /* Clipping rectangle in port coordinates */
/* Used by MAC only. */
#if defined(XP_UNIX) || defined(XP_SYMBIAN)
void * ws_info; /* Platform-dependent additonal data */
#endif /* XP_UNIX || XP_SYMBIAN */
NPWindowType type; /* Is this a window or a drawable? */
} NPWindow;
typedef struct _NPFullPrint
{
NPBool pluginPrinted; /* Set TRUE if plugin handled fullscreen */
/* printing */
NPBool printOne; /* TRUE if plugin should print one copy */
/* to default printer */
void* platformPrint; /* Platform-specific printing info */
} NPFullPrint;
typedef struct _NPEmbedPrint
{
NPWindow window;
void* platformPrint; /* Platform-specific printing info */
} NPEmbedPrint;
typedef struct _NPPrint
{
uint16 mode; /* NP_FULL or NP_EMBED */
union
{
NPFullPrint fullPrint; /* if mode is NP_FULL */
NPEmbedPrint embedPrint; /* if mode is NP_EMBED */
} print;
} NPPrint;
#ifdef XP_MACOSX
typedef NPNSMenu NPMenu;
#else
typedef void * NPMenu;
#endif
typedef enum {
NPCoordinateSpacePlugin = 1,
NPCoordinateSpaceWindow,
NPCoordinateSpaceFlippedWindow,
NPCoordinateSpaceScreen,
NPCoordinateSpaceFlippedScreen
} NPCoordinateSpace;
#if defined(XP_MAC) || defined(XP_MACOSX)
#ifndef NP_NO_CARBON
typedef EventRecord NPEvent;
#endif
#elif defined(XP_SYMBIAN)
typedef QEvent NPEvent;
#elif defined(XP_WIN)
typedef struct _NPEvent
{
uint16 event;
uint32 wParam;
uint32 lParam;
} NPEvent;
#elif defined (XP_UNIX)
typedef XEvent NPEvent;
#else
typedef void* NPEvent;
#endif /* XP_MAC */
#if defined(XP_MAC)
typedef RgnHandle NPRegion;
#elif defined(XP_MACOSX)
/*
* NPRegion's type depends on the drawing model specified by the plugin (see NPNVpluginDrawingModel).
* NPQDRegion represents a QuickDraw RgnHandle and is used with the QuickDraw drawing model.
* NPCGRegion repesents a graphical region when using any other drawing model.
*/
typedef void *NPRegion;
#ifndef NP_NO_QUICKDRAW
typedef RgnHandle NPQDRegion;
#endif
typedef CGPathRef NPCGRegion;
#elif defined(XP_WIN)
typedef HRGN NPRegion;
#elif defined(XP_UNIX)
typedef Region NPRegion;
#elif defined(XP_SYMBIAN)
typedef QRegion* NPRegion;
#else
typedef void *NPRegion;
#endif /* XP_MAC */
#ifdef XP_MACOSX
/*
* NP_CGContext is the type of the NPWindow's 'window' when the plugin specifies NPDrawingModelCoreGraphics
* as its drawing model.
*/
typedef struct NP_CGContext
{
CGContextRef context;
#ifdef NP_NO_CARBON
NPNSWindow *window;
#else
void *window; // Can be either an NSWindow or a WindowRef depending on the event model
#endif
} NP_CGContext;
/*
* NP_GLContext is the type of the NPWindow's 'window' when the plugin specifies NPDrawingModelOpenGL as its
* drawing model.
*/
typedef struct NP_GLContext
{
CGLContextObj context;
#ifdef NP_NO_CARBON
NPNSWindow *window;
#else
void *window; // Can be either an NSWindow or a WindowRef depending on the event model
#endif
} NP_GLContext;
#endif /* XP_MACOSX */
#if defined(XP_MAC) || defined(XP_MACOSX)
/*
* Mac-specific structures and definitions.
*/
#ifndef NP_NO_QUICKDRAW
/*
* NP_Port is the type of the NPWindow's 'window' when the plugin specifies NPDrawingModelQuickDraw as its
* drawing model, or the plugin does not specify a drawing model.
*
* It is not recommended that new plugins use NPDrawingModelQuickDraw or NP_Port, as QuickDraw has been
* deprecated in Mac OS X 10.5. CoreGraphics is the preferred drawing API.
*
* NP_Port is not available in 64-bit.
*/
typedef struct NP_Port
{
CGrafPtr port; /* Grafport */
int32 portx; /* position inside the topmost window */
int32 porty;
} NP_Port;
#endif /* NP_NO_QUICKDRAW */
/*
* Non-standard event types that can be passed to HandleEvent
*/
#define getFocusEvent (osEvt + 16)
#define loseFocusEvent (osEvt + 17)
#define adjustCursorEvent (osEvt + 18)
#endif /* XP_MAC */
/*
* Values for mode passed to NPP_New:
*/
#define NP_EMBED 1
#define NP_FULL 2
/*
* Values for stream type passed to NPP_NewStream:
*/
#define NP_NORMAL 1
#define NP_SEEK 2
#define NP_ASFILE 3
#define NP_ASFILEONLY 4
#define NP_MAXREADY (((unsigned)(~0)<<1)>>1)
#if !defined(__LP64__)
#if defined(XP_MAC) || defined(XP_MACOSX)
#pragma options align=reset
#endif
#endif /* __LP64__ */
/*----------------------------------------------------------------------*/
/* Error and Reason Code definitions */
/*----------------------------------------------------------------------*/
/*
* Values of type NPError:
*/
#define NPERR_BASE 0
#define NPERR_NO_ERROR (NPERR_BASE + 0)
#define NPERR_GENERIC_ERROR (NPERR_BASE + 1)
#define NPERR_INVALID_INSTANCE_ERROR (NPERR_BASE + 2)
#define NPERR_INVALID_FUNCTABLE_ERROR (NPERR_BASE + 3)
#define NPERR_MODULE_LOAD_FAILED_ERROR (NPERR_BASE + 4)
#define NPERR_OUT_OF_MEMORY_ERROR (NPERR_BASE + 5)
#define NPERR_INVALID_PLUGIN_ERROR (NPERR_BASE + 6)
#define NPERR_INVALID_PLUGIN_DIR_ERROR (NPERR_BASE + 7)
#define NPERR_INCOMPATIBLE_VERSION_ERROR (NPERR_BASE + 8)
#define NPERR_INVALID_PARAM (NPERR_BASE + 9)
#define NPERR_INVALID_URL (NPERR_BASE + 10)
#define NPERR_FILE_NOT_FOUND (NPERR_BASE + 11)
#define NPERR_NO_DATA (NPERR_BASE + 12)
#define NPERR_STREAM_NOT_SEEKABLE (NPERR_BASE + 13)
/*
* Values of type NPReason:
*/
#define NPRES_BASE 0
#define NPRES_DONE (NPRES_BASE + 0)
#define NPRES_NETWORK_ERR (NPRES_BASE + 1)
#define NPRES_USER_BREAK (NPRES_BASE + 2)
/*
* Don't use these obsolete error codes any more.
*/
#define NP_NOERR NP_NOERR_is_obsolete_use_NPERR_NO_ERROR
#define NP_EINVAL NP_EINVAL_is_obsolete_use_NPERR_GENERIC_ERROR
#define NP_EABORT NP_EABORT_is_obsolete_use_NPRES_USER_BREAK
/*
* Version feature information
*/
#define NPVERS_HAS_STREAMOUTPUT 8
#define NPVERS_HAS_NOTIFICATION 9
#define NPVERS_HAS_LIVECONNECT 9
#define NPVERS_WIN16_HAS_LIVECONNECT 9
#define NPVERS_68K_HAS_LIVECONNECT 11
#define NPVERS_HAS_WINDOWLESS 11
#define NPVERS_HAS_XPCONNECT_SCRIPTING 13 /* Not implemented in WebKit */
#define NPVERS_HAS_NPRUNTIME_SCRIPTING 14
#define NPVERS_HAS_FORM_VALUES 15 /* Not implemented in WebKit; see bug 13061 */
#define NPVERS_HAS_POPUPS_ENABLED_STATE 16 /* Not implemented in WebKit */
#define NPVERS_HAS_RESPONSE_HEADERS 17
#define NPVERS_HAS_NPOBJECT_ENUM 18
#define NPVERS_HAS_PLUGIN_THREAD_ASYNC_CALL 19
#define NPVERS_HAS_ALL_NETWORK_STREAMS 20
#define NPVERS_HAS_URL_AND_AUTH_INFO 21
#define NPVERS_HAS_PRIVATE_MODE 22
#define NPVERS_MACOSX_HAS_EVENT_MODELS 23
#define NPVERS_HAS_CANCEL_SRC_STREAM 24
/*----------------------------------------------------------------------*/
/* Function Prototypes */
/*----------------------------------------------------------------------*/
#if defined(_WINDOWS) && !defined(WIN32)
#define NP_LOADDS _loadds
#else
#define NP_LOADDS
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*
* NPP_* functions are provided by the plugin and called by the navigator.
*/
#ifdef XP_UNIX
char* NPP_GetMIMEDescription(void);
#endif /* XP_UNIX */
NPError NPP_Initialize(void);
void NPP_Shutdown(void);
NPError NP_LOADDS NPP_New(NPMIMEType pluginType, NPP instance,
uint16 mode, int16 argc, char* argn[],
char* argv[], NPSavedData* saved);
NPError NP_LOADDS NPP_Destroy(NPP instance, NPSavedData** save);
NPError NP_LOADDS NPP_SetWindow(NPP instance, NPWindow* window);
NPError NP_LOADDS NPP_NewStream(NPP instance, NPMIMEType type,
NPStream* stream, NPBool seekable,
uint16* stype);
NPError NP_LOADDS NPP_DestroyStream(NPP instance, NPStream* stream,
NPReason reason);
int32 NP_LOADDS NPP_WriteReady(NPP instance, NPStream* stream);
int32 NP_LOADDS NPP_Write(NPP instance, NPStream* stream, int32 offset,
int32 len, void* buffer);
void NP_LOADDS NPP_StreamAsFile(NPP instance, NPStream* stream,
const char* fname);
void NP_LOADDS NPP_Print(NPP instance, NPPrint* platformPrint);
int16 NPP_HandleEvent(NPP instance, void* event);
void NP_LOADDS NPP_URLNotify(NPP instance, const char* url,
NPReason reason, void* notifyData);
jref NP_LOADDS NPP_GetJavaClass(void);
NPError NPP_GetValue(NPP instance, NPPVariable variable,
void *value);
NPError NPP_SetValue(NPP instance, NPNVariable variable,
void *value);
/*
* NPN_* functions are provided by the navigator and called by the plugin.
*/
void NPN_Version(int* plugin_major, int* plugin_minor,
int* netscape_major, int* netscape_minor);
NPError NPN_GetURLNotify(NPP instance, const char* url,
const char* target, void* notifyData);
NPError NPN_GetURL(NPP instance, const char* url,
const char* target);
NPError NPN_PostURLNotify(NPP instance, const char* url,
const char* target, uint32 len,
const char* buf, NPBool file,
void* notifyData);
NPError NPN_PostURL(NPP instance, const char* url,
const char* target, uint32 len,
const char* buf, NPBool file);
NPError NPN_RequestRead(NPStream* stream, NPByteRange* rangeList);
NPError NPN_NewStream(NPP instance, NPMIMEType type,
const char* target, NPStream** stream);
int32 NPN_Write(NPP instance, NPStream* stream, int32 len,
void* buffer);
NPError NPN_DestroyStream(NPP instance, NPStream* stream,
NPReason reason);
void NPN_Status(NPP instance, const char* message);
const char* NPN_UserAgent(NPP instance);
void* NPN_MemAlloc(uint32 size);
void NPN_MemFree(void* ptr);
uint32 NPN_MemFlush(uint32 size);
void NPN_ReloadPlugins(NPBool reloadPages);
JRIEnv* NPN_GetJavaEnv(void);
jref NPN_GetJavaPeer(NPP instance);
NPError NPN_GetValue(NPP instance, NPNVariable variable,
void *value);
NPError NPN_SetValue(NPP instance, NPPVariable variable,
void *value);
void NPN_InvalidateRect(NPP instance, NPRect *invalidRect);
void NPN_InvalidateRegion(NPP instance, NPRegion invalidRegion);
void NPN_ForceRedraw(NPP instance);
void NPN_PushPopupsEnabledState(NPP instance, NPBool enabled);
void NPN_PopPopupsEnabledState(NPP instance);
void NPN_PluginThreadAsyncCall(NPP instance, void (*func) (void *), void *userData);
NPError NPN_GetValueForURL(NPP instance, NPNURLVariable variable, const char* url, char** value, uint32* len);
NPError NPN_SetValueForURL(NPP instance, NPNURLVariable variable, const char* url, const char* value, uint32 len);
NPError NPN_GetAuthenticationInfo(NPP instance, const char* protocol, const char* host, int32 port, const char* scheme, const char *realm, char** username, uint32* ulen, char** password, uint32* plen);
uint32 NPN_ScheduleTimer(NPP instance, uint32 interval, NPBool repeat, void (*timerFunc)(NPP npp, uint32 timerID));
void NPN_UnscheduleTimer(NPP instance, uint32 timerID);
NPError NPN_PopUpContextMenu(NPP instance, NPMenu* menu);
NPBool NPN_ConvertPoint(NPP instance, double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double *destX, double *destY, NPCoordinateSpace destSpace);
#ifdef __cplusplus
}
#endif
#endif

237
npapi/npfunctions.h Normal file
View File

@@ -0,0 +1,237 @@
/* ====================================================================
* Copyright (c) 2016 - 2019 The GmSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the GmSSL Project.
* (http://gmssl.org/)"
*
* 4. The name "GmSSL Project" must not be used to endorse or promote
* products derived from this software without prior written
* permission. For written permission, please contact
* guanzhi1980@gmail.com.
*
* 5. Products derived from this software may not be called "GmSSL"
* nor may "GmSSL" appear in their names without prior written
* permission of the GmSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the GmSSL Project
* (http://gmssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*/
#ifndef NPFUNCTIONS_H
#define NPFUNCTIONS_H
#include "npruntime.h"
#include "npapi.h"
#ifdef __cplusplus
extern "C" {
#endif
#if defined(XP_WIN)
#define EXPORTED_CALLBACK(_type, _name) _type (__stdcall * _name)
#else
#define EXPORTED_CALLBACK(_type, _name) _type (* _name)
#endif
typedef NPError (*NPN_GetURLNotifyProcPtr)(NPP instance, const char* URL, const char* window, void* notifyData);
typedef NPError (*NPN_PostURLNotifyProcPtr)(NPP instance, const char* URL, const char* window, uint32 len, const char* buf, NPBool file, void* notifyData);
typedef NPError (*NPN_RequestReadProcPtr)(NPStream* stream, NPByteRange* rangeList);
typedef NPError (*NPN_NewStreamProcPtr)(NPP instance, NPMIMEType type, const char* window, NPStream** stream);
typedef int32 (*NPN_WriteProcPtr)(NPP instance, NPStream* stream, int32 len, void* buffer);
typedef NPError (*NPN_DestroyStreamProcPtr)(NPP instance, NPStream* stream, NPReason reason);
typedef void (*NPN_StatusProcPtr)(NPP instance, const char* message);
typedef const char*(*NPN_UserAgentProcPtr)(NPP instance);
typedef void* (*NPN_MemAllocProcPtr)(uint32 size);
typedef void (*NPN_MemFreeProcPtr)(void* ptr);
typedef uint32 (*NPN_MemFlushProcPtr)(uint32 size);
typedef void (*NPN_ReloadPluginsProcPtr)(NPBool reloadPages);
typedef NPError (*NPN_GetValueProcPtr)(NPP instance, NPNVariable variable, void *ret_value);
typedef NPError (*NPN_SetValueProcPtr)(NPP instance, NPPVariable variable, void *value);
typedef void (*NPN_InvalidateRectProcPtr)(NPP instance, NPRect *rect);
typedef void (*NPN_InvalidateRegionProcPtr)(NPP instance, NPRegion region);
typedef void (*NPN_ForceRedrawProcPtr)(NPP instance);
typedef NPError (*NPN_GetURLProcPtr)(NPP instance, const char* URL, const char* window);
typedef NPError (*NPN_PostURLProcPtr)(NPP instance, const char* URL, const char* window, uint32 len, const char* buf, NPBool file);
typedef void* (*NPN_GetJavaEnvProcPtr)(void);
typedef void* (*NPN_GetJavaPeerProcPtr)(NPP instance);
typedef void (*NPN_PushPopupsEnabledStateProcPtr)(NPP instance, NPBool enabled);
typedef void (*NPN_PopPopupsEnabledStateProcPtr)(NPP instance);
typedef void (*NPN_PluginThreadAsyncCallProcPtr)(NPP npp, void (*func)(void *), void *userData);
typedef NPError (*NPN_GetValueForURLProcPtr)(NPP npp, NPNURLVariable variable, const char* url, char** value, uint32* len);
typedef NPError (*NPN_SetValueForURLProcPtr)(NPP npp, NPNURLVariable variable, const char* url, const char* value, uint32 len);
typedef NPError (*NPN_GetAuthenticationInfoProcPtr)(NPP npp, const char* protocol, const char* host, int32 port, const char* scheme, const char *realm, char** username, uint32* ulen, char** password, uint32* plen);
typedef uint32 (*NPN_ScheduleTimerProcPtr)(NPP npp, uint32 interval, NPBool repeat, void (*timerFunc)(NPP npp, uint32 timerID));
typedef void (*NPN_UnscheduleTimerProcPtr)(NPP npp, uint32 timerID);
typedef NPError (*NPN_PopUpContextMenuProcPtr)(NPP instance, NPMenu* menu);
typedef NPBool (*NPN_ConvertPointProcPtr)(NPP npp, double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double *destX, double *destY, NPCoordinateSpace destSpace);
typedef void (*NPN_ReleaseVariantValueProcPtr) (NPVariant *variant);
typedef NPIdentifier (*NPN_GetStringIdentifierProcPtr) (const NPUTF8 *name);
typedef void (*NPN_GetStringIdentifiersProcPtr) (const NPUTF8 **names, int32_t nameCount, NPIdentifier *identifiers);
typedef NPIdentifier (*NPN_GetIntIdentifierProcPtr) (int32_t intid);
typedef int32_t (*NPN_IntFromIdentifierProcPtr) (NPIdentifier identifier);
typedef bool (*NPN_IdentifierIsStringProcPtr) (NPIdentifier identifier);
typedef NPUTF8 *(*NPN_UTF8FromIdentifierProcPtr) (NPIdentifier identifier);
typedef NPObject* (*NPN_CreateObjectProcPtr) (NPP, NPClass *aClass);
typedef NPObject* (*NPN_RetainObjectProcPtr) (NPObject *obj);
typedef void (*NPN_ReleaseObjectProcPtr) (NPObject *obj);
typedef bool (*NPN_InvokeProcPtr) (NPP npp, NPObject *obj, NPIdentifier methodName, const NPVariant *args, unsigned argCount, NPVariant *result);
typedef bool (*NPN_InvokeDefaultProcPtr) (NPP npp, NPObject *obj, const NPVariant *args, unsigned argCount, NPVariant *result);
typedef bool (*NPN_EvaluateProcPtr) (NPP npp, NPObject *obj, NPString *script, NPVariant *result);
typedef bool (*NPN_GetPropertyProcPtr) (NPP npp, NPObject *obj, NPIdentifier propertyName, NPVariant *result);
typedef bool (*NPN_SetPropertyProcPtr) (NPP npp, NPObject *obj, NPIdentifier propertyName, const NPVariant *value);
typedef bool (*NPN_HasPropertyProcPtr) (NPP, NPObject *npobj, NPIdentifier propertyName);
typedef bool (*NPN_HasMethodProcPtr) (NPP npp, NPObject *npobj, NPIdentifier methodName);
typedef bool (*NPN_RemovePropertyProcPtr) (NPP npp, NPObject *obj, NPIdentifier propertyName);
typedef void (*NPN_SetExceptionProcPtr) (NPObject *obj, const NPUTF8 *message);
typedef bool (*NPN_EnumerateProcPtr) (NPP npp, NPObject *npobj, NPIdentifier **identifier, uint32_t *count);
typedef bool (*NPN_ConstructProcPtr)(NPP npp, NPObject* obj, const NPVariant *args, uint32_t argCount, NPVariant *result);
typedef NPError (*NPP_NewProcPtr)(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, char* argn[], char* argv[], NPSavedData* saved);
typedef NPError (*NPP_DestroyProcPtr)(NPP instance, NPSavedData** save);
typedef NPError (*NPP_SetWindowProcPtr)(NPP instance, NPWindow* window);
typedef NPError (*NPP_NewStreamProcPtr)(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16* stype);
typedef NPError (*NPP_DestroyStreamProcPtr)(NPP instance, NPStream* stream, NPReason reason);
typedef void (*NPP_StreamAsFileProcPtr)(NPP instance, NPStream* stream, const char* fname);
typedef int32 (*NPP_WriteReadyProcPtr)(NPP instance, NPStream* stream);
typedef int32 (*NPP_WriteProcPtr)(NPP instance, NPStream* stream, int32_t offset, int32_t len, void* buffer);
typedef void (*NPP_PrintProcPtr)(NPP instance, NPPrint* platformPrint);
typedef int16 (*NPP_HandleEventProcPtr)(NPP instance, void* event);
typedef void (*NPP_URLNotifyProcPtr)(NPP instance, const char* URL, NPReason reason, void* notifyData);
typedef NPError (*NPP_GetValueProcPtr)(NPP instance, NPPVariable variable, void *ret_value);
typedef NPError (*NPP_SetValueProcPtr)(NPP instance, NPNVariable variable, void *value);
typedef void *(*NPP_GetJavaClassProcPtr)(void);
typedef void* JRIGlobalRef; //not using this right now
typedef struct _NPNetscapeFuncs {
uint16 size;
uint16 version;
NPN_GetURLProcPtr geturl;
NPN_PostURLProcPtr posturl;
NPN_RequestReadProcPtr requestread;
NPN_NewStreamProcPtr newstream;
NPN_WriteProcPtr write;
NPN_DestroyStreamProcPtr destroystream;
NPN_StatusProcPtr status;
NPN_UserAgentProcPtr uagent;
NPN_MemAllocProcPtr memalloc;
NPN_MemFreeProcPtr memfree;
NPN_MemFlushProcPtr memflush;
NPN_ReloadPluginsProcPtr reloadplugins;
NPN_GetJavaEnvProcPtr getJavaEnv;
NPN_GetJavaPeerProcPtr getJavaPeer;
NPN_GetURLNotifyProcPtr geturlnotify;
NPN_PostURLNotifyProcPtr posturlnotify;
NPN_GetValueProcPtr getvalue;
NPN_SetValueProcPtr setvalue;
NPN_InvalidateRectProcPtr invalidaterect;
NPN_InvalidateRegionProcPtr invalidateregion;
NPN_ForceRedrawProcPtr forceredraw;
NPN_GetStringIdentifierProcPtr getstringidentifier;
NPN_GetStringIdentifiersProcPtr getstringidentifiers;
NPN_GetIntIdentifierProcPtr getintidentifier;
NPN_IdentifierIsStringProcPtr identifierisstring;
NPN_UTF8FromIdentifierProcPtr utf8fromidentifier;
NPN_IntFromIdentifierProcPtr intfromidentifier;
NPN_CreateObjectProcPtr createobject;
NPN_RetainObjectProcPtr retainobject;
NPN_ReleaseObjectProcPtr releaseobject;
NPN_InvokeProcPtr invoke;
NPN_InvokeDefaultProcPtr invokeDefault;
NPN_EvaluateProcPtr evaluate;
NPN_GetPropertyProcPtr getproperty;
NPN_SetPropertyProcPtr setproperty;
NPN_RemovePropertyProcPtr removeproperty;
NPN_HasPropertyProcPtr hasproperty;
NPN_HasMethodProcPtr hasmethod;
NPN_ReleaseVariantValueProcPtr releasevariantvalue;
NPN_SetExceptionProcPtr setexception;
NPN_PushPopupsEnabledStateProcPtr pushpopupsenabledstate;
NPN_PopPopupsEnabledStateProcPtr poppopupsenabledstate;
NPN_EnumerateProcPtr enumerate;
NPN_PluginThreadAsyncCallProcPtr pluginthreadasynccall;
NPN_ConstructProcPtr construct;
NPN_GetValueForURLProcPtr getvalueforurl;
NPN_SetValueForURLProcPtr setvalueforurl;
NPN_GetAuthenticationInfoProcPtr getauthenticationinfo;
NPN_ScheduleTimerProcPtr scheduletimer;
NPN_UnscheduleTimerProcPtr unscheduletimer;
NPN_PopUpContextMenuProcPtr popupcontextmenu;
NPN_ConvertPointProcPtr convertpoint;
} NPNetscapeFuncs;
typedef struct _NPPluginFuncs {
uint16 size;
uint16 version;
NPP_NewProcPtr newp;
NPP_DestroyProcPtr destroy;
NPP_SetWindowProcPtr setwindow;
NPP_NewStreamProcPtr newstream;
NPP_DestroyStreamProcPtr destroystream;
NPP_StreamAsFileProcPtr asfile;
NPP_WriteReadyProcPtr writeready;
NPP_WriteProcPtr write;
NPP_PrintProcPtr print;
NPP_HandleEventProcPtr event;
NPP_URLNotifyProcPtr urlnotify;
JRIGlobalRef javaClass;
NPP_GetValueProcPtr getvalue;
NPP_SetValueProcPtr setvalue;
} NPPluginFuncs;
typedef EXPORTED_CALLBACK(NPError, NP_GetEntryPointsFuncPtr)(NPPluginFuncs*);
typedef EXPORTED_CALLBACK(void, NPP_ShutdownProcPtr)(void);
#if defined(XP_MACOSX)
typedef void (*BP_CreatePluginMIMETypesPreferencesFuncPtr)(void);
typedef NPError (*MainFuncPtr)(NPNetscapeFuncs*, NPPluginFuncs*, NPP_ShutdownProcPtr*);
#endif
#if defined(XP_UNIX)
typedef EXPORTED_CALLBACK(NPError, NP_InitializeFuncPtr)(NPNetscapeFuncs*, NPPluginFuncs*);
typedef EXPORTED_CALLBACK(char*, NP_GetMIMEDescriptionFuncPtr)(void);
#else
typedef EXPORTED_CALLBACK(NPError, NP_InitializeFuncPtr)(NPNetscapeFuncs*);
#endif
#ifdef __cplusplus
}
#endif
#endif

339
npapi/npruntime.h Normal file
View File

@@ -0,0 +1,339 @@
/* ====================================================================
* Copyright (c) 2016 - 2019 The GmSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the GmSSL Project.
* (http://gmssl.org/)"
*
* 4. The name "GmSSL Project" must not be used to endorse or promote
* products derived from this software without prior written
* permission. For written permission, please contact
* guanzhi1980@gmail.com.
*
* 5. Products derived from this software may not be called "GmSSL"
* nor may "GmSSL" appear in their names without prior written
* permission of the GmSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the GmSSL Project
* (http://gmssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*/
#ifndef _NP_RUNTIME_H_
#define _NP_RUNTIME_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
#include "npapi.h"
/*
This API is used to facilitate binding code written in C to script
objects. The API in this header does not assume the presence of a
user agent. That is, it can be used to bind C code to scripting
environments outside of the context of a user agent.
However, the normal use of the this API is in the context of a
scripting environment running in a browser or other user agent.
In particular it is used to support the extended Netscape
script-ability API for plugins (NP-SAP). NP-SAP is an extension
of the Netscape plugin API. As such we have adopted the use of
the "NP" prefix for this API.
The following NP{N|P}Variables were added to the Netscape plugin
API (in npapi.h):
NPNVWindowNPObject
NPNVPluginElementNPObject
NPPVpluginScriptableNPObject
These variables are exposed through NPN_GetValue() and
NPP_GetValue() (respectively) and are used to establish the
initial binding between the user agent and native code. The DOM
objects in the user agent can be examined and manipulated using
the NPN_ functions that operate on NPObjects described in this
header.
To the extent possible the assumptions about the scripting
language used by the scripting environment have been minimized.
*/
/*
Objects (non-primitive data) passed between 'C' and script is
always wrapped in an NPObject. The 'interface' of an NPObject is
described by an NPClass.
*/
typedef struct NPObject NPObject;
typedef struct NPClass NPClass;
typedef char NPUTF8;
typedef struct _NPString {
const NPUTF8 *UTF8Characters;
uint32_t UTF8Length;
} NPString;
typedef enum {
NPVariantType_Void,
NPVariantType_Null,
NPVariantType_Bool,
NPVariantType_Int32,
NPVariantType_Double,
NPVariantType_String,
NPVariantType_Object
} NPVariantType;
typedef struct _NPVariant {
NPVariantType type;
union {
bool boolValue;
int32_t intValue;
double doubleValue;
NPString stringValue;
NPObject *objectValue;
} value;
} NPVariant;
/*
NPN_ReleaseVariantValue is called on all 'out' parameters references.
Specifically it is called on variants that are resultant out parameters
in NPGetPropertyFunctionPtr and NPInvokeFunctionPtr. Resultant variants
from these two functions should be initialized using the
NPN_InitializeVariantXXX() functions.
After calling NPReleaseVariantValue, the type of the variant will
be set to NPVariantUndefinedType.
*/
void NPN_ReleaseVariantValue (NPVariant *variant);
#define NPVARIANT_IS_VOID(_v) ((_v).type == NPVariantType_Void)
#define NPVARIANT_IS_NULL(_v) ((_v).type == NPVariantType_Null)
#define NPVARIANT_IS_BOOLEAN(_v) ((_v).type == NPVariantType_Bool)
#define NPVARIANT_IS_INT32(_v) ((_v).type == NPVariantType_Int32)
#define NPVARIANT_IS_DOUBLE(_v) ((_v).type == NPVariantType_Double)
#define NPVARIANT_IS_STRING(_v) ((_v).type == NPVariantType_String)
#define NPVARIANT_IS_OBJECT(_v) ((_v).type == NPVariantType_Object)
#define NPVARIANT_TO_BOOLEAN(_v) ((_v).value.boolValue)
#define NPVARIANT_TO_INT32(_v) ((_v).value.intValue)
#define NPVARIANT_TO_DOUBLE(_v) ((_v).value.doubleValue)
#define NPVARIANT_TO_STRING(_v) ((_v).value.stringValue)
#define NPVARIANT_TO_OBJECT(_v) ((_v).value.objectValue)
#define NP_BEGIN_MACRO do {
#define NP_END_MACRO } while (0)
#define VOID_TO_NPVARIANT(_v) NP_BEGIN_MACRO (_v).type = NPVariantType_Void; (_v).value.objectValue = NULL; NP_END_MACRO
#define NULL_TO_NPVARIANT(_v) NP_BEGIN_MACRO (_v).type = NPVariantType_Null; (_v).value.objectValue = NULL; NP_END_MACRO
#define BOOLEAN_TO_NPVARIANT(_val, _v) NP_BEGIN_MACRO (_v).type = NPVariantType_Bool; (_v).value.boolValue = !!(_val); NP_END_MACRO
#define INT32_TO_NPVARIANT(_val, _v) NP_BEGIN_MACRO (_v).type = NPVariantType_Int32; (_v).value.intValue = _val; NP_END_MACRO
#define DOUBLE_TO_NPVARIANT(_val, _v) NP_BEGIN_MACRO (_v).type = NPVariantType_Double; (_v).value.doubleValue = _val; NP_END_MACRO
#define STRINGZ_TO_NPVARIANT(_val, _v) NP_BEGIN_MACRO (_v).type = NPVariantType_String; NPString str = { _val, strlen(_val) }; (_v).value.stringValue = str; NP_END_MACRO
#define STRINGN_TO_NPVARIANT(_val, _len, _v) NP_BEGIN_MACRO (_v).type = NPVariantType_String; NPString str = { _val, _len }; (_v).value.stringValue = str; NP_END_MACRO
#define OBJECT_TO_NPVARIANT(_val, _v) NP_BEGIN_MACRO (_v).type = NPVariantType_Object; (_v).value.objectValue = _val; NP_END_MACRO
/*
Type mappings (JavaScript types have been used for illustration
purposes):
JavaScript to C (NPVariant with type:)
undefined NPVariantType_Void
null NPVariantType_Null
Boolean NPVariantType_Bool
Number NPVariantType_Double or NPVariantType_Int32
String NPVariantType_String
Object NPVariantType_Object
C (NPVariant with type:) to JavaScript
NPVariantType_Void undefined
NPVariantType_Null null
NPVariantType_Bool Boolean
NPVariantType_Int32 Number
NPVariantType_Double Number
NPVariantType_String String
NPVariantType_Object Object
*/
typedef void *NPIdentifier;
/*
NPObjects have methods and properties. Methods and properties are
identified with NPIdentifiers. These identifiers may be reflected
in script. NPIdentifiers can be either strings or integers, IOW,
methods and properties can be identified by either strings or
integers (i.e. foo["bar"] vs foo[1]). NPIdentifiers can be
compared using ==. In case of any errors, the requested
NPIdentifier(s) will be NULL.
*/
NPIdentifier NPN_GetStringIdentifier(const NPUTF8 *name);
void NPN_GetStringIdentifiers(const NPUTF8 **names, int32_t nameCount, NPIdentifier *identifiers);
NPIdentifier NPN_GetIntIdentifier(int32_t intid);
bool NPN_IdentifierIsString(NPIdentifier identifier);
/*
The NPUTF8 returned from NPN_UTF8FromIdentifier SHOULD be freed.
*/
NPUTF8 *NPN_UTF8FromIdentifier(NPIdentifier identifier);
/*
Get the integer represented by identifier. If identifier is not an
integer identifier, the behaviour is undefined.
*/
int32_t NPN_IntFromIdentifier(NPIdentifier identifier);
/*
NPObject behavior is implemented using the following set of
callback functions.
The NPVariant *result argument of these functions (where
applicable) should be released using NPN_ReleaseVariantValue().
*/
typedef NPObject *(*NPAllocateFunctionPtr)(NPP npp, NPClass *aClass);
typedef void (*NPDeallocateFunctionPtr)(NPObject *obj);
typedef void (*NPInvalidateFunctionPtr)(NPObject *obj);
typedef bool (*NPHasMethodFunctionPtr)(NPObject *obj, NPIdentifier name);
typedef bool (*NPInvokeFunctionPtr)(NPObject *obj, NPIdentifier name, const NPVariant *args, uint32_t argCount, NPVariant *result);
typedef bool (*NPInvokeDefaultFunctionPtr)(NPObject *npobj, const NPVariant *args, uint32_t argCount, NPVariant *result);
typedef bool (*NPHasPropertyFunctionPtr)(NPObject *obj, NPIdentifier name);
typedef bool (*NPGetPropertyFunctionPtr)(NPObject *obj, NPIdentifier name, NPVariant *result);
typedef bool (*NPSetPropertyFunctionPtr)(NPObject *obj, NPIdentifier name, const NPVariant *value);
typedef bool (*NPRemovePropertyFunctionPtr)(NPObject *npobj, NPIdentifier name);
typedef bool (*NPEnumerationFunctionPtr)(NPObject *npobj, NPIdentifier **value, uint32_t *count);
typedef bool (*NPConstructFunctionPtr)(NPObject *npobj, const NPVariant *args, uint32_t argCount, NPVariant *result);
/*
NPObjects returned by create have a reference count of one. It is the caller's responsibility
to release the returned object.
NPInvokeFunctionPtr function may return false to indicate a the method could not be invoked.
NPGetPropertyFunctionPtr and NPSetPropertyFunctionPtr may return false to indicate a property doesn't
exist.
NPInvalidateFunctionPtr is called by the scripting environment when the native code is
shutdown. Any attempt to message a NPObject instance after the invalidate
callback has been called will result in undefined behavior, even if the
native code is still retaining those NPObject instances.
(The runtime will typically return immediately, with 0 or NULL, from an attempt to
dispatch to a NPObject, but this behavior should not be depended upon.)
The NPEnumerationFunctionPtr function may pass an array of
NPIdentifiers back to the caller. The callee allocs the memory of
the array using NPN_MemAlloc(), and it's the caller's responsibility
to release it using NPN_MemFree().
*/
struct NPClass
{
uint32_t structVersion;
NPAllocateFunctionPtr allocate;
NPDeallocateFunctionPtr deallocate;
NPInvalidateFunctionPtr invalidate;
NPHasMethodFunctionPtr hasMethod;
NPInvokeFunctionPtr invoke;
NPInvokeDefaultFunctionPtr invokeDefault;
NPHasPropertyFunctionPtr hasProperty;
NPGetPropertyFunctionPtr getProperty;
NPSetPropertyFunctionPtr setProperty;
NPRemovePropertyFunctionPtr removeProperty;
NPEnumerationFunctionPtr enumerate;
NPConstructFunctionPtr construct;
};
#define NP_CLASS_STRUCT_VERSION 3
#define NP_CLASS_STRUCT_VERSION_ENUM 2
#define NP_CLASS_STRUCT_VERSION_CTOR 3
#define NP_CLASS_STRUCT_VERSION_HAS_ENUM(npclass) \
((npclass)->structVersion >= NP_CLASS_STRUCT_VERSION_ENUM)
#define NP_CLASS_STRUCT_VERSION_HAS_CTOR(npclass) \
((npclass)->structVersion >= NP_CLASS_STRUCT_VERSION_CTOR)
struct NPObject {
NPClass *_class;
uint32_t referenceCount;
// Additional space may be allocated here by types of NPObjects
};
/*
If the class has an allocate function, NPN_CreateObject invokes that function,
otherwise a NPObject is allocated and returned. If a class has an allocate
function it is the responsibility of that implementation to set the initial retain
count to 1.
*/
NPObject *NPN_CreateObject(NPP npp, NPClass *aClass);
/*
Increment the NPObject's reference count.
*/
NPObject *NPN_RetainObject (NPObject *obj);
/*
Decremented the NPObject's reference count. If the reference
count goes to zero, the class's destroy function is invoke if
specified, otherwise the object is freed directly.
*/
void NPN_ReleaseObject (NPObject *obj);
/*
Functions to access script objects represented by NPObject.
Calls to script objects are synchronous. If a function returns a
value, it will be supplied via the result NPVariant
argument. Successful calls will return true, false will be
returned in case of an error.
Calls made from plugin code to script must be made from the thread
on which the plugin was initialized.
*/
bool NPN_Invoke(NPP npp, NPObject *npobj, NPIdentifier methodName, const NPVariant *args, uint32_t argCount, NPVariant *result);
bool NPN_InvokeDefault(NPP npp, NPObject *npobj, const NPVariant *args, uint32_t argCount, NPVariant *result);
bool NPN_Evaluate(NPP npp, NPObject *npobj, NPString *script, NPVariant *result);
bool NPN_GetProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName, NPVariant *result);
bool NPN_SetProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName, const NPVariant *value);
bool NPN_RemoveProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName);
bool NPN_HasProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName);
bool NPN_HasMethod(NPP npp, NPObject *npobj, NPIdentifier methodName);
bool NPN_Enumerate(NPP npp, NPObject *npobj, NPIdentifier **identifier, uint32_t *count);
bool NPN_Construct(NPP npp, NPObject *npobj, const NPVariant *args, uint32_t argCount, NPVariant *result);
/*
NPN_SetException may be called to trigger a script exception upon return
from entry points into NPObjects.
*/
void NPN_SetException (NPObject *obj, const NPUTF8 *message);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -21,7 +21,7 @@ IF[{- !$disabled{tests} -}]
pailliertest cpktest otptest gmapitest ec2test \
bfibetest bb1ibetest sm9test \
saftest sdftest skftest softest zuctest \
serpenttest specktest base58test
serpenttest specktest base58test ecrstest
SOURCE[aborttest]=aborttest.c
INCLUDE[aborttest]=../include
@@ -376,6 +376,10 @@ IF[{- !$disabled{tests} -}]
INCLUDE[base58test]=../include
DEPEND[base58test]=../libcrypto
SOURCE[ecrstest]=ecrstest.c
INCLUDE[ecrstest]=../include
DEPEND[ecrstest]=../libcrypto
IF[{- !$disabled{shared} -}]
PROGRAMS_NO_INST=shlibloadtest
SOURCE[shlibloadtest]=shlibloadtest.c

117
test/ecrstest.c Normal file
View File

@@ -0,0 +1,117 @@
/* ====================================================================
* Copyright (c) 2014 - 2019 The GmSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the GmSSL Project.
* (http://gmssl.org/)"
*
* 4. The name "GmSSL Project" must not be used to endorse or promote
* products derived from this software without prior written
* permission. For written permission, please contact
* guanzhi1980@gmail.com.
*
* 5. Products derived from this software may not be called "GmSSL"
* nor may "GmSSL" appear in their names without prior written
* permission of the GmSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the GmSSL Project
* (http://gmssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "../e_os.h"
#ifdef OPENSSL_NO_ECRS
int main(int argc, char **argv)
{
printf("No ECRS support\n");
return 0;
}
#else
# include <openssl/evp.h>
# include <openssl/err.h>
# include <openssl/ecrs.h>
# include <openssl/objects.h>
# define NUM_KEYS 5
int main(int argc, char **argv)
{
int err = 1;
STACK_OF(EC_KEY) *keys = NULL;
EC_KEY *ec_key = NULL;
int type = NID_sm3;
unsigned char dgst[32];
unsigned char sig[(NUM_KEYS + 1) * 80];
unsigned int siglen = sizeof(sig);
int i;
if (!(keys = sk_EC_KEY_new(NULL))) {
ERR_print_errors_fp(stderr);
goto end;
}
for (i = 0; i < NUM_KEYS; i++) {
if (!(ec_key = EC_KEY_new_by_curve_name(NID_sm2p256v1))) {
ERR_print_errors_fp(stderr);
goto end;
}
if (!EC_KEY_generate_key(ec_key)) {
ERR_print_errors_fp(stderr);
goto end;
}
sk_EC_KEY_push(keys, ec_key);
ec_key = NULL;
}
if (!ECRS_sign(type, dgst, sizeof(dgst), sig, &siglen, keys,
sk_EC_KEY_value(keys, 0))) {
ERR_print_errors_fp(stderr);
goto end;
}
if (1 != ECRS_verify(type, dgst, sizeof(dgst), sig, siglen, keys)) {
ERR_print_errors_fp(stderr);
goto end;
}
err = 0;
end:
sk_EC_KEY_free(keys);
EC_KEY_free(ec_key);
EXIT(err);
}
#endif

View File

@@ -0,0 +1,12 @@
#! /usr/bin/env perl
# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
#
# Licensed under the OpenSSL license (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
use OpenSSL::Test::Simple;
simple_test("test_ecrs", "ecrstest", "ecrs");

File diff suppressed because it is too large Load Diff

View File

@@ -1,411 +1,411 @@
SSL_CTX_set_generate_session_id 1 1_1_0d EXIST::FUNCTION:
SSL_get_peer_cert_chain 2 1_1_0d EXIST::FUNCTION:
SSL_is_init_finished 3 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_verify_depth 4 1_1_0d EXIST::FUNCTION:
SSL_set_verify_result 5 1_1_0d EXIST::FUNCTION:
TLS_client_method 6 1_1_0d EXIST::FUNCTION:
SSL_trace 7 1_1_0d EXIST::FUNCTION:SSL_TRACE
SSL_COMP_get0_name 8 1_1_0d EXIST::FUNCTION:
SSL_set_session 9 1_1_0d EXIST::FUNCTION:
SSL_renegotiate_abbreviated 10 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_srp_cb_arg 11 1_1_0d EXIST::FUNCTION:SRP
SSL_get_srtp_profiles 12 1_1_0d EXIST::FUNCTION:SRTP
SSL_CTX_set_ctlog_list_file 13 1_1_0d EXIST::FUNCTION:CT
SSL_up_ref 14 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_srp_password 15 1_1_0d EXIST::FUNCTION:SRP
SSL_set_verify_depth 16 1_1_0d EXIST::FUNCTION:
SSL_SESSION_get_compress_id 17 1_1_0d EXIST::FUNCTION:
SSL_CTX_get0_certificate 18 1_1_0d EXIST::FUNCTION:
TLS_method 19 1_1_0d EXIST::FUNCTION:
SSL_get0_dane 20 1_1_0d EXIST::FUNCTION:
SSL_CTX_sess_set_get_cb 21 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_security_level 22 1_1_0d EXIST::FUNCTION:
SSLv3_client_method 23 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,SSL3_METHOD
SSL_get_privatekey 24 1_1_0d EXIST::FUNCTION:
SSL_get_wbio 25 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_client_cert_cb 26 1_1_0d EXIST::FUNCTION:
TLSv1_client_method 27 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_METHOD
SSL_CTX_add_client_CA 28 1_1_0d EXIST::FUNCTION:
SSL_CTX_use_PrivateKey_ASN1 29 1_1_0d EXIST::FUNCTION:
SSL_get_current_compression 30 1_1_0d EXIST::FUNCTION:
SSL_is_gmtls 31 1_1_0d EXIST::FUNCTION:
PEM_read_SSL_SESSION 32 1_1_0d EXIST::FUNCTION:STDIO
BIO_ssl_copy_session_id 33 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_client_CA_list 34 1_1_0d EXIST::FUNCTION:
SSL_CIPHER_get_cipher_nid 35 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_alpn_protos 36 1_1_0d EXIST::FUNCTION:
SSL_CTX_use_RSAPrivateKey 37 1_1_0d EXIST::FUNCTION:RSA
SSL_SESSION_has_ticket 38 1_1_0d EXIST::FUNCTION:
SSL_SESSION_up_ref 39 1_1_0d EXIST::FUNCTION:
SSL_extension_supported 40 1_1_0d EXIST::FUNCTION:
SSL_CIPHER_get_digest_nid 41 1_1_0d EXIST::FUNCTION:
GMTLS_client_method 42 1_1_0d EXIST::FUNCTION:GMTLS
SSL_has_matching_session_id 43 1_1_0d EXIST::FUNCTION:
SSL_version 44 1_1_0d EXIST::FUNCTION:
SSL_set_not_resumable_session_callback 45 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_default_read_buffer_len 46 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_security_callback 47 1_1_0d EXIST::FUNCTION:
SSL_get_version 48 1_1_0d EXIST::FUNCTION:
SSL_SESSION_get0_hostname 49 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_security_level 50 1_1_0d EXIST::FUNCTION:
SSL_SESSION_print_keylog 51 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_psk_client_callback 52 1_1_0d EXIST::FUNCTION:PSK
SSL_CIPHER_find 53 1_1_0d EXIST::FUNCTION:
DTLS_server_method 54 1_1_0d EXIST::FUNCTION:
SSL_get_certificate 55 1_1_0d EXIST::FUNCTION:
SSL_set_debug 56 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0
SSL_get_state 57 1_1_0d EXIST::FUNCTION:
SSL_CTX_add_client_custom_ext 58 1_1_0d EXIST::FUNCTION:
SSL_set_generate_session_id 59 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_default_passwd_cb 60 1_1_0d EXIST::FUNCTION:
SSL_set1_host 61 1_1_0d EXIST::FUNCTION:
SSL_want 62 1_1_0d EXIST::FUNCTION:
DTLSv1_2_client_method 63 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,DTLS1_2_METHOD
SSL_set0_wbio 64 1_1_0d EXIST::FUNCTION:
BIO_new_buffer_ssl_connect 65 1_1_0d EXIST::FUNCTION:
SSL_set1_param 66 1_1_0d EXIST::FUNCTION:
SSL_CIPHER_get_id 67 1_1_0d EXIST::FUNCTION:
SSL_CTX_load_verify_locations 68 1_1_0d EXIST::FUNCTION:
SSL_get_default_passwd_cb 69 1_1_0d EXIST::FUNCTION:
SSL_connect 70 1_1_0d EXIST::FUNCTION:
BIO_new_ssl 71 1_1_0d EXIST::FUNCTION:
SSL_set_session_secret_cb 72 1_1_0d EXIST::FUNCTION:
SSL_peek 73 1_1_0d EXIST::FUNCTION:
TLSv1_1_method 74 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_1_METHOD
SSL_free 75 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_cert_cb 76 1_1_0d EXIST::FUNCTION:
DTLSv1_2_method 77 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,DTLS1_2_METHOD
SSL_check_chain 78 1_1_0d EXIST::FUNCTION:
SSL_dane_tlsa_add 79 1_1_0d EXIST::FUNCTION:
ERR_load_SSL_strings 80 1_1_0d EXIST::FUNCTION:
SSL_CTX_use_PrivateKey_file 81 1_1_0d EXIST::FUNCTION:
TLSv1_method 82 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_METHOD
SSL_CONF_CTX_finish 83 1_1_0d EXIST::FUNCTION:
SSL_CTX_set0_security_ex_data 84 1_1_0d EXIST::FUNCTION:
SSL_CTX_SRP_CTX_init 85 1_1_0d EXIST::FUNCTION:SRP
SSL_set_purpose 86 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_tlsext_use_srtp 87 1_1_0d EXIST::FUNCTION:SRTP
SSL_get_security_callback 88 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_default_passwd_cb 89 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_alpn_select_cb 90 1_1_0d EXIST::FUNCTION:
SSL_accept 91 1_1_0d EXIST::FUNCTION:
SSL_get_options 92 1_1_0d EXIST::FUNCTION:
SSL_CIPHER_get_bits 93 1_1_0d EXIST::FUNCTION:
SSL_get0_verified_chain 94 1_1_0d EXIST::FUNCTION:
SSL_CIPHER_is_aead 95 1_1_0d EXIST::FUNCTION:
SSL_SESSION_get_timeout 96 1_1_0d EXIST::FUNCTION:
SSL_CTX_SRP_CTX_free 97 1_1_0d EXIST::FUNCTION:SRP
SSL_get_server_random 98 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_cert_store 99 1_1_0d EXIST::FUNCTION:
SSL_CTX_get0_param 100 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_ex_data 101 1_1_0d EXIST::FUNCTION:
SSL_COMP_get_compression_methods 102 1_1_0d EXIST::FUNCTION:
SSL_certs_clear 103 1_1_0d EXIST::FUNCTION:
SSL_CTX_dane_set_flags 104 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_client_CA_list 105 1_1_0d EXIST::FUNCTION:
SSL_get0_peername 106 1_1_0d EXIST::FUNCTION:
TLSv1_1_client_method 107 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_1_METHOD
SSL_use_PrivateKey 108 1_1_0d EXIST::FUNCTION:
SSL_get_psk_identity_hint 109 1_1_0d EXIST::FUNCTION:PSK
TLS_server_method 110 1_1_0d EXIST::FUNCTION:
SSL_renegotiate 111 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_ex_data 112 1_1_0d EXIST::FUNCTION:
SSL_get1_session 113 1_1_0d EXIST::FUNCTION:
SSL_set_session_id_context 114 1_1_0d EXIST::FUNCTION:
SSL_SRP_CTX_init 115 1_1_0d EXIST::FUNCTION:SRP
SSL_CTX_get_quiet_shutdown 116 1_1_0d EXIST::FUNCTION:
SSL_CTX_use_serverinfo_file 117 1_1_0d EXIST::FUNCTION:
SSL_use_PrivateKey_file 118 1_1_0d EXIST::FUNCTION:
SSL_SESSION_set1_id 119 1_1_0d EXIST::FUNCTION:
SSL_set_ssl_method 120 1_1_0d EXIST::FUNCTION:
SSL_get0_param 121 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_quiet_shutdown 122 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_srp_username 123 1_1_0d EXIST::FUNCTION:SRP
SSL_use_certificate_chain_file 124 1_1_0d EXIST::FUNCTION:
SSL_CTX_flush_sessions 125 1_1_0d EXIST::FUNCTION:
SSL_get_ssl_method 126 1_1_0d EXIST::FUNCTION:
SSL_CTX_get0_ctlog_store 127 1_1_0d EXIST::FUNCTION:CT
SSL_get_srp_username 128 1_1_0d EXIST::FUNCTION:SRP
SSL_CTX_set_client_cert_engine 129 1_1_0d EXIST::FUNCTION:ENGINE
SSL_CTX_set_cookie_generate_cb 130 1_1_0d EXIST::FUNCTION:
SSL_alert_type_string_long 131 1_1_0d EXIST::FUNCTION:
SSL_set_default_read_buffer_len 132 1_1_0d EXIST::FUNCTION:
SSL_CONF_CTX_free 133 1_1_0d EXIST::FUNCTION:
SSL_get_all_async_fds 134 1_1_0d EXIST::FUNCTION:
SSL_get_servername_type 135 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_options 136 1_1_0d EXIST::FUNCTION:
SSL_set_verify 137 1_1_0d EXIST::FUNCTION:
SSL_set_connect_state 138 1_1_0d EXIST::FUNCTION:
DTLSv1_listen 139 1_1_0d EXIST::FUNCTION:SOCK
SSL_CONF_CTX_set1_prefix 140 1_1_0d EXIST::FUNCTION:
SSL_set_psk_client_callback 141 1_1_0d EXIST::FUNCTION:PSK
BIO_ssl_shutdown 142 1_1_0d EXIST::FUNCTION:
SSL_get_default_passwd_cb_userdata 143 1_1_0d EXIST::FUNCTION:
SSL_SESSION_set_timeout 144 1_1_0d EXIST::FUNCTION:
SSL_CONF_cmd_argv 145 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_info_callback 146 1_1_0d EXIST::FUNCTION:
SSL_CTX_config 147 1_1_0d EXIST::FUNCTION:
SSL_SESSION_get_time 148 1_1_0d EXIST::FUNCTION:
SSL_get_current_cipher 149 1_1_0d EXIST::FUNCTION:
SSL_get_quiet_shutdown 150 1_1_0d EXIST::FUNCTION:
SSL_set_cert_cb 151 1_1_0d EXIST::FUNCTION:
SSL_get_sigalgs 152 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_tmp_dh_callback 153 1_1_0d EXIST::FUNCTION:DH
SSL_CTX_get_options 154 1_1_0d EXIST::FUNCTION:
SSL_get_srp_N 155 1_1_0d EXIST::FUNCTION:SRP
SSL_COMP_get_id 156 1_1_0d EXIST::FUNCTION:
SSL_CONF_cmd_value_type 157 1_1_0d EXIST::FUNCTION:
SSL_SESSION_get0_id_context 158 1_1_0d EXIST::FUNCTION:
SSL_set_session_ticket_ext_cb 159 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_info_callback 160 1_1_0d EXIST::FUNCTION:
SSL_get0_next_proto_negotiated 161 1_1_0d EXIST::FUNCTION:NEXTPROTONEG
SSL_CTX_set_not_resumable_session_callback 162 1_1_0d EXIST::FUNCTION:
SSL_srp_server_param_with_username 163 1_1_0d EXIST::FUNCTION:SRP
SSL_get0_alpn_selected 164 1_1_0d EXIST::FUNCTION:
SSL_check_private_key 165 1_1_0d EXIST::FUNCTION:
TLSv1_2_server_method 166 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_2_METHOD
SSL_CTX_set_verify_depth 167 1_1_0d EXIST::FUNCTION:
SSL_SESSION_set1_id_context 168 1_1_0d EXIST::FUNCTION:
SSL_SESSION_print 169 1_1_0d EXIST::FUNCTION:
SSL_use_certificate 170 1_1_0d EXIST::FUNCTION:
SRP_Calc_A_param 171 1_1_0d EXIST::FUNCTION:SRP
SSL_renegotiate_pending 172 1_1_0d EXIST::FUNCTION:
BIO_f_ssl 173 1_1_0d EXIST::FUNCTION:
SSL_CTX_sess_get_new_cb 174 1_1_0d EXIST::FUNCTION:
SSL_in_before 175 1_1_0d EXIST::FUNCTION:
TLSv1_server_method 176 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_METHOD
SSL_get0_security_ex_data 177 1_1_0d EXIST::FUNCTION:
SSL_in_init 178 1_1_0d EXIST::FUNCTION:
SSL_CIPHER_get_kx_nid 179 1_1_0d EXIST::FUNCTION:
SSL_pending 180 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_next_protos_advertised_cb 181 1_1_0d EXIST::FUNCTION:NEXTPROTONEG
SSL_SRP_CTX_free 182 1_1_0d EXIST::FUNCTION:SRP
SSL_CONF_CTX_set_flags 183 1_1_0d EXIST::FUNCTION:
SSL_get_changed_async_fds 184 1_1_0d EXIST::FUNCTION:
SSL_copy_session_id 185 1_1_0d EXIST::FUNCTION:
SSL_set0_security_ex_data 186 1_1_0d EXIST::FUNCTION:
SSL_get_SSL_CTX 187 1_1_0d EXIST::FUNCTION:
SSL_get_ex_data_X509_STORE_CTX_idx 188 1_1_0d EXIST::FUNCTION:
SSL_get1_supported_ciphers 189 1_1_0d EXIST::FUNCTION:
SSL_get_peer_certificate 190 1_1_0d EXIST::FUNCTION:
SSL_get_current_expansion 191 1_1_0d EXIST::FUNCTION:
SSL_get_psk_identity 192 1_1_0d EXIST::FUNCTION:PSK
SSL_get_read_ahead 193 1_1_0d EXIST::FUNCTION:
DTLSv1_method 194 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,DTLS1_METHOD
SSL_set_default_passwd_cb_userdata 195 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_next_proto_select_cb 196 1_1_0d EXIST::FUNCTION:NEXTPROTONEG
SSL_new 197 1_1_0d EXIST::FUNCTION:
SSL_CTX_use_certificate_file 198 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_srp_strength 199 1_1_0d EXIST::FUNCTION:SRP
SSL_CTX_set_srp_verify_param_callback 200 1_1_0d EXIST::FUNCTION:SRP
SSL_SESSION_get_master_key 201 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_msg_callback 202 1_1_0d EXIST::FUNCTION:
SSL_use_RSAPrivateKey_ASN1 203 1_1_0d EXIST::FUNCTION:RSA
SSL_CTX_set_ssl_version 204 1_1_0d EXIST::FUNCTION:
SSL_has_pending 205 1_1_0d EXIST::FUNCTION:
SSL_get_verify_result 206 1_1_0d EXIST::FUNCTION:
SSL_CTX_use_RSAPrivateKey_file 207 1_1_0d EXIST::FUNCTION:RSA
SSL_CTX_set0_ctlog_store 208 1_1_0d EXIST::FUNCTION:CT
SSL_CTX_use_RSAPrivateKey_ASN1 209 1_1_0d EXIST::FUNCTION:RSA
SSL_set_tlsext_use_srtp 210 1_1_0d EXIST::FUNCTION:SRTP
SSL_CTX_get_security_callback 211 1_1_0d EXIST::FUNCTION:
SSL_clear 212 1_1_0d EXIST::FUNCTION:
SSL_write 213 1_1_0d EXIST::FUNCTION:
SSL_CTX_callback_ctrl 214 1_1_0d EXIST::FUNCTION:
SSL_set_fd 215 1_1_0d EXIST::FUNCTION:SOCK
SSL_set_tmp_dh_callback 216 1_1_0d EXIST::FUNCTION:DH
SSL_CTX_use_PrivateKey 217 1_1_0d EXIST::FUNCTION:
SSL_SESSION_new 218 1_1_0d EXIST::FUNCTION:
SSL_CTX_use_psk_identity_hint 219 1_1_0d EXIST::FUNCTION:PSK
SSL_CTX_set_cert_store 220 1_1_0d EXIST::FUNCTION:
SSL_state_string 221 1_1_0d EXIST::FUNCTION:
SSL_ctrl 222 1_1_0d EXIST::FUNCTION:
SSL_test_functions 223 1_1_0d EXIST::FUNCTION:UNIT_TEST
SSL_SESSION_get_ex_data 224 1_1_0d EXIST::FUNCTION:
SSL_get_client_ciphers 225 1_1_0d EXIST::FUNCTION:
SSL_clear_options 226 1_1_0d EXIST::FUNCTION:
SSL_use_RSAPrivateKey 227 1_1_0d EXIST::FUNCTION:RSA
SSL_SESSION_get0_ticket 228 1_1_0d EXIST::FUNCTION:
SSL_get_rbio 229 1_1_0d EXIST::FUNCTION:
SSL_add_dir_cert_subjects_to_stack 230 1_1_0d EXIST::FUNCTION:
SSL_get_wfd 231 1_1_0d EXIST::FUNCTION:
SSL_ct_is_enabled 232 1_1_0d EXIST::FUNCTION:CT
SSL_select_next_proto 233 1_1_0d EXIST::FUNCTION:
DTLSv1_client_method 234 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,DTLS1_METHOD
SSL_is_dtls 235 1_1_0d EXIST::FUNCTION:
TLSv1_2_client_method 236 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_2_METHOD
SSL_COMP_add_compression_method 237 1_1_0d EXIST::FUNCTION:
SSL_use_PrivateKey_ASN1 238 1_1_0d EXIST::FUNCTION:
SSL_set_rfd 239 1_1_0d EXIST::FUNCTION:SOCK
SSL_config 240 1_1_0d EXIST::FUNCTION:
SSL_load_client_CA_file 241 1_1_0d EXIST::FUNCTION:
SSL_CTX_dane_clear_flags 242 1_1_0d EXIST::FUNCTION:
SSL_rstate_string 243 1_1_0d EXIST::FUNCTION:
SSL_set_alpn_protos 244 1_1_0d EXIST::FUNCTION:
SSL_use_certificate_ASN1 245 1_1_0d EXIST::FUNCTION:
SSL_shutdown 246 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_default_verify_file 247 1_1_0d EXIST::FUNCTION:
SSL_CTX_has_client_custom_ext 248 1_1_0d EXIST::FUNCTION:
SSL_set_quiet_shutdown 249 1_1_0d EXIST::FUNCTION:
SSL_CTX_sess_set_remove_cb 250 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_ssl_method 251 1_1_0d EXIST::FUNCTION:
SSL_set_psk_server_callback 252 1_1_0d EXIST::FUNCTION:PSK
TLSv1_2_method 253 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_2_METHOD
SSL_get0_peer_scts 254 1_1_0d EXIST::FUNCTION:CT
BIO_new_ssl_connect 255 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_ciphers 256 1_1_0d EXIST::FUNCTION:
SSL_set_read_ahead 257 1_1_0d EXIST::FUNCTION:
SSL_dup_CA_list 258 1_1_0d EXIST::FUNCTION:
SSL_CTX_get0_security_ex_data 259 1_1_0d EXIST::FUNCTION:
SSL_get_cipher_list 260 1_1_0d EXIST::FUNCTION:
SSL_set_accept_state 261 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_trust 262 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_timeout 263 1_1_0d EXIST::FUNCTION:
SSL_read 264 1_1_0d EXIST::FUNCTION:
SSL_set_cipher_list 265 1_1_0d EXIST::FUNCTION:
PEM_write_SSL_SESSION 266 1_1_0d EXIST::FUNCTION:STDIO
SSL_set_ct_validation_callback 267 1_1_0d EXIST::FUNCTION:CT
SSL_get_shared_sigalgs 268 1_1_0d EXIST::FUNCTION:
i2d_SSL_SESSION 269 1_1_0d EXIST::FUNCTION:
SSL_set_hostflags 270 1_1_0d EXIST::FUNCTION:
SSL_rstate_string_long 271 1_1_0d EXIST::FUNCTION:
GMTLS_server_method 272 1_1_0d EXIST::FUNCTION:GMTLS
SSL_set_ex_data 273 1_1_0d EXIST::FUNCTION:
SSL_get_finished 274 1_1_0d EXIST::FUNCTION:
SSL_SESSION_free 275 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_default_passwd_cb_userdata 276 1_1_0d EXIST::FUNCTION:
SSL_SESSION_set_time 277 1_1_0d EXIST::FUNCTION:
SSL_get_client_CA_list 278 1_1_0d EXIST::FUNCTION:
SSL_CTX_dane_mtype_set 279 1_1_0d EXIST::FUNCTION:
SSL_get_servername 280 1_1_0d EXIST::FUNCTION:
SSL_CONF_cmd 281 1_1_0d EXIST::FUNCTION:
SSL_CTX_get0_privatekey 282 1_1_0d EXIST::FUNCTION:
SSL_CTX_enable_ct 283 1_1_0d EXIST::FUNCTION:CT
SSL_CIPHER_get_name 284 1_1_0d EXIST::FUNCTION:
SSL_dane_clear_flags 285 1_1_0d EXIST::FUNCTION:
SSL_add1_host 286 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_timeout 287 1_1_0d EXIST::FUNCTION:
SSL_get_verify_callback 288 1_1_0d EXIST::FUNCTION:
SSL_CIPHER_get_auth_nid 289 1_1_0d EXIST::FUNCTION:
SSL_set0_rbio 290 1_1_0d EXIST::FUNCTION:
SSL_set_security_level 291 1_1_0d EXIST::FUNCTION:
PEM_write_bio_SSL_SESSION 292 1_1_0d EXIST::FUNCTION:
SSL_set_wfd 293 1_1_0d EXIST::FUNCTION:SOCK
SSL_session_reused 294 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_purpose 295 1_1_0d EXIST::FUNCTION:
SSL_CTX_ct_is_enabled 296 1_1_0d EXIST::FUNCTION:CT
SSL_set_default_passwd_cb 297 1_1_0d EXIST::FUNCTION:
SSL_get_session 298 1_1_0d EXIST::FUNCTION:
DTLS_method 299 1_1_0d EXIST::FUNCTION:
GMTLS_method 300 1_1_0d EXIST::FUNCTION:GMTLS
SSL_CTX_set_verify 301 1_1_0d EXIST::FUNCTION:
SSL_CIPHER_standard_name 302 1_1_0d EXIST::FUNCTION:SSL_TRACE
SSL_get_security_level 303 1_1_0d EXIST::FUNCTION:
SSL_SESSION_print_fp 304 1_1_0d EXIST::FUNCTION:STDIO
SSL_waiting_for_async 305 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_client_cert_cb 306 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_verify_callback 307 1_1_0d EXIST::FUNCTION:
SSL_CTX_sess_get_get_cb 308 1_1_0d EXIST::FUNCTION:
SSL_set_trust 309 1_1_0d EXIST::FUNCTION:
SSL_alert_desc_string 310 1_1_0d EXIST::FUNCTION:
SSL_state_string_long 311 1_1_0d EXIST::FUNCTION:
SSL_CTX_ctrl 312 1_1_0d EXIST::FUNCTION:
SSL_do_handshake 313 1_1_0d EXIST::FUNCTION:
SSL_CTX_remove_session 314 1_1_0d EXIST::FUNCTION:
SSL_CTX_use_certificate_ASN1 315 1_1_0d EXIST::FUNCTION:
SSL_get_shutdown 316 1_1_0d EXIST::FUNCTION:
DTLS_client_method 317 1_1_0d EXIST::FUNCTION:
SSL_CTX_check_private_key 318 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_cookie_verify_cb 319 1_1_0d EXIST::FUNCTION:
SSL_set_session_ticket_ext 320 1_1_0d EXIST::FUNCTION:
SSL_set_shutdown 321 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_default_verify_paths 322 1_1_0d EXIST::FUNCTION:
SSL_COMP_get_name 323 1_1_0d EXIST::FUNCTION:
SSL_get_srp_userinfo 324 1_1_0d EXIST::FUNCTION:SRP
SSL_alert_desc_string_long 325 1_1_0d EXIST::FUNCTION:
SSL_CIPHER_get_version 326 1_1_0d EXIST::FUNCTION:
d2i_SSL_SESSION 327 1_1_0d EXIST::FUNCTION:
SSL_set_SSL_CTX 328 1_1_0d EXIST::FUNCTION:
SSL_client_version 329 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_verify_mode 330 1_1_0d EXIST::FUNCTION:
SSL_callback_ctrl 331 1_1_0d EXIST::FUNCTION:
SSL_set_info_callback 332 1_1_0d EXIST::FUNCTION:
SSL_add_file_cert_subjects_to_stack 333 1_1_0d EXIST::FUNCTION:
TLSv1_1_server_method 334 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_1_METHOD
SSL_CTX_free 335 1_1_0d EXIST::FUNCTION:
SSL_get0_dane_tlsa 336 1_1_0d EXIST::FUNCTION:
SSL_CTX_new 337 1_1_0d EXIST::FUNCTION:
SSL_is_server 338 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_cert_verify_callback 339 1_1_0d EXIST::FUNCTION:
SSL_dane_set_flags 340 1_1_0d EXIST::FUNCTION:
SSL_get_fd 341 1_1_0d EXIST::FUNCTION:
SSL_CONF_CTX_new 342 1_1_0d EXIST::FUNCTION:
SSL_use_RSAPrivateKey_file 343 1_1_0d EXIST::FUNCTION:RSA
SSL_CTX_set_default_ctlog_list_file 344 1_1_0d EXIST::FUNCTION:CT
SSL_CTX_sess_set_new_cb 345 1_1_0d EXIST::FUNCTION:
SSL_get0_dane_authority 346 1_1_0d EXIST::FUNCTION:
SSL_CTX_use_certificate 347 1_1_0d EXIST::FUNCTION:
SSL_get_peer_finished 348 1_1_0d EXIST::FUNCTION:
SSL_CONF_CTX_clear_flags 349 1_1_0d EXIST::FUNCTION:
SSL_SESSION_set_ex_data 350 1_1_0d EXIST::FUNCTION:
SSL_get_ex_data 351 1_1_0d EXIST::FUNCTION:
SSL_use_psk_identity_hint 352 1_1_0d EXIST::FUNCTION:PSK
SSL_set_bio 353 1_1_0d EXIST::FUNCTION:
SSL_CTX_set1_param 354 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_default_passwd_cb_userdata 355 1_1_0d EXIST::FUNCTION:
SSL_get_rfd 356 1_1_0d EXIST::FUNCTION:
SSL_COMP_set0_compression_methods 357 1_1_0d EXIST::FUNCTION:
SSL_get_ciphers 358 1_1_0d EXIST::FUNCTION:
DTLSv1_2_server_method 359 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,DTLS1_2_METHOD
SSL_get_error 360 1_1_0d EXIST::FUNCTION:
SSL_CTX_sessions 361 1_1_0d EXIST::FUNCTION:
SSL_SESSION_get_protocol_version 362 1_1_0d EXIST::FUNCTION:
SSL_CIPHER_description 363 1_1_0d EXIST::FUNCTION:
SSL_SESSION_get0_peer 364 1_1_0d EXIST::FUNCTION:
OPENSSL_init_ssl 365 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_srp_username_callback 366 1_1_0d EXIST::FUNCTION:SRP
SSL_CTX_set_session_id_context 367 1_1_0d EXIST::FUNCTION:
SSL_SESSION_get_id 368 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_ct_validation_callback 369 1_1_0d EXIST::FUNCTION:CT
SSL_CTX_dane_enable 370 1_1_0d EXIST::FUNCTION:
SSL_CTX_add_session 371 1_1_0d EXIST::FUNCTION:
SSL_set_options 372 1_1_0d EXIST::FUNCTION:
SSL_dup 373 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_cipher_list 374 1_1_0d EXIST::FUNCTION:
SSL_CONF_CTX_set_ssl_ctx 375 1_1_0d EXIST::FUNCTION:
SSL_CTX_up_ref 376 1_1_0d EXIST::FUNCTION:
SSL_CTX_use_serverinfo 377 1_1_0d EXIST::FUNCTION:
SSL_get_shared_ciphers 378 1_1_0d EXIST::FUNCTION:
SSL_CTX_sess_get_remove_cb 379 1_1_0d EXIST::FUNCTION:
SSL_get_verify_mode 380 1_1_0d EXIST::FUNCTION:
SSL_add_ssl_module 381 1_1_0d EXIST::FUNCTION:
SSL_get_selected_srtp_profile 382 1_1_0d EXIST::FUNCTION:SRTP
SSL_get_srp_g 383 1_1_0d EXIST::FUNCTION:SRP
SSL_SESSION_get_ticket_lifetime_hint 384 1_1_0d EXIST::FUNCTION:
SSL_add_client_CA 385 1_1_0d EXIST::FUNCTION:
SSL_enable_ct 386 1_1_0d EXIST::FUNCTION:CT
SSL_CTX_clear_options 387 1_1_0d EXIST::FUNCTION:
SSLv3_method 388 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,SSL3_METHOD
SSL_alert_type_string 389 1_1_0d EXIST::FUNCTION:
SSL_CTX_add_server_custom_ext 390 1_1_0d EXIST::FUNCTION:
DTLSv1_server_method 391 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,DTLS1_METHOD
SSL_CTX_use_certificate_chain_file 392 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_srp_client_pwd_callback 393 1_1_0d EXIST::FUNCTION:SRP
SSL_get_info_callback 394 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_default_verify_dir 395 1_1_0d EXIST::FUNCTION:
SSLv3_server_method 396 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,SSL3_METHOD
SSL_set_srp_server_param_pw 397 1_1_0d EXIST::FUNCTION:SRP
SSL_CONF_CTX_set_ssl 398 1_1_0d EXIST::FUNCTION:
SSL_set_msg_callback 399 1_1_0d EXIST::FUNCTION:
SSL_get_client_random 400 1_1_0d EXIST::FUNCTION:
SSL_set_srp_server_param 401 1_1_0d EXIST::FUNCTION:SRP
PEM_read_bio_SSL_SESSION 402 1_1_0d EXIST::FUNCTION:
SSL_dane_enable 403 1_1_0d EXIST::FUNCTION:
SSL_use_certificate_file 404 1_1_0d EXIST::FUNCTION:
SSL_get_verify_depth 405 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_psk_server_callback 406 1_1_0d EXIST::FUNCTION:PSK
SSL_set_security_callback 407 1_1_0d EXIST::FUNCTION:
SSL_get_default_timeout 408 1_1_0d EXIST::FUNCTION:
SSL_SESSION_get0_cipher 409 1_1_0d EXIST::FUNCTION:
SSL_set_client_CA_list 410 1_1_0d EXIST::FUNCTION:
SSL_export_keying_material 411 1_1_0d EXIST::FUNCTION:
SSL_get_wbio 1 1_1_0d EXIST::FUNCTION:
SSL_set_info_callback 2 1_1_0d EXIST::FUNCTION:
SSL_SESSION_has_ticket 3 1_1_0d EXIST::FUNCTION:
SSL_set_psk_server_callback 4 1_1_0d EXIST::FUNCTION:PSK
SSL_get_changed_async_fds 5 1_1_0d EXIST::FUNCTION:
SSL_get_client_ciphers 6 1_1_0d EXIST::FUNCTION:
d2i_SSL_SESSION 7 1_1_0d EXIST::FUNCTION:
SSL_do_handshake 8 1_1_0d EXIST::FUNCTION:
SSL_dane_enable 9 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_default_verify_file 10 1_1_0d EXIST::FUNCTION:
SSL_waiting_for_async 11 1_1_0d EXIST::FUNCTION:
SSL_set_session_ticket_ext_cb 12 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_tmp_dh_callback 13 1_1_0d EXIST::FUNCTION:DH
DTLSv1_server_method 14 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,DTLS1_METHOD
SSLv3_server_method 15 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,SSL3_METHOD
SSL_set_purpose 16 1_1_0d EXIST::FUNCTION:
SSL_SRP_CTX_free 17 1_1_0d EXIST::FUNCTION:SRP
TLS_client_method 18 1_1_0d EXIST::FUNCTION:
SSL_SESSION_set_time 19 1_1_0d EXIST::FUNCTION:
SSL_copy_session_id 20 1_1_0d EXIST::FUNCTION:
SSL_set_verify_result 21 1_1_0d EXIST::FUNCTION:
SSL_CTX_ctrl 22 1_1_0d EXIST::FUNCTION:
SSL_rstate_string 23 1_1_0d EXIST::FUNCTION:
SSL_set_srp_server_param 24 1_1_0d EXIST::FUNCTION:SRP
SSL_set_rfd 25 1_1_0d EXIST::FUNCTION:SOCK
SSL_CIPHER_get_version 26 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_info_callback 27 1_1_0d EXIST::FUNCTION:
ERR_load_SSL_strings 28 1_1_0d EXIST::FUNCTION:
SSL_set_shutdown 29 1_1_0d EXIST::FUNCTION:
BIO_new_ssl_connect 30 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_srp_client_pwd_callback 31 1_1_0d EXIST::FUNCTION:SRP
SSL_dane_clear_flags 32 1_1_0d EXIST::FUNCTION:
SSL_get_info_callback 33 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_default_passwd_cb_userdata 34 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_client_CA_list 35 1_1_0d EXIST::FUNCTION:
SSL_get0_dane 36 1_1_0d EXIST::FUNCTION:
SSL_SESSION_set1_id 37 1_1_0d EXIST::FUNCTION:
SSL_set_tlsext_use_srtp 38 1_1_0d EXIST::FUNCTION:SRTP
SSL_add1_host 39 1_1_0d EXIST::FUNCTION:
SSL_CIPHER_get_kx_nid 40 1_1_0d EXIST::FUNCTION:
SSL_SESSION_set_ex_data 41 1_1_0d EXIST::FUNCTION:
SSL_CTX_sessions 42 1_1_0d EXIST::FUNCTION:
SSL_get0_dane_authority 43 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_cert_cb 44 1_1_0d EXIST::FUNCTION:
SSL_get_state 45 1_1_0d EXIST::FUNCTION:
SSL_extension_supported 46 1_1_0d EXIST::FUNCTION:
DTLS_client_method 47 1_1_0d EXIST::FUNCTION:
SSL_get_peer_certificate 48 1_1_0d EXIST::FUNCTION:
SSL_CONF_CTX_new 49 1_1_0d EXIST::FUNCTION:
SSL_CTX_SRP_CTX_init 50 1_1_0d EXIST::FUNCTION:SRP
SSL_CTX_get_cert_store 51 1_1_0d EXIST::FUNCTION:
SSL_CTX_sess_get_new_cb 52 1_1_0d EXIST::FUNCTION:
SSL_in_before 53 1_1_0d EXIST::FUNCTION:
DTLSv1_2_server_method 54 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,DTLS1_2_METHOD
SSL_ctrl 55 1_1_0d EXIST::FUNCTION:
SSL_set_session 56 1_1_0d EXIST::FUNCTION:
SSL_get_verify_result 57 1_1_0d EXIST::FUNCTION:
SSL_CTX_set1_param 58 1_1_0d EXIST::FUNCTION:
PEM_read_SSL_SESSION 59 1_1_0d EXIST::FUNCTION:STDIO
SSL_get_finished 60 1_1_0d EXIST::FUNCTION:
SSL_set_session_id_context 61 1_1_0d EXIST::FUNCTION:
SSL_set_client_CA_list 62 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_client_cert_cb 63 1_1_0d EXIST::FUNCTION:
SSL_CTX_sess_set_remove_cb 64 1_1_0d EXIST::FUNCTION:
SSL_set0_wbio 65 1_1_0d EXIST::FUNCTION:
SSL_use_psk_identity_hint 66 1_1_0d EXIST::FUNCTION:PSK
SSL_get_shared_ciphers 67 1_1_0d EXIST::FUNCTION:
SSL_set_debug 68 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0
SSL_CTX_use_serverinfo_file 69 1_1_0d EXIST::FUNCTION:
SSL_renegotiate_abbreviated 70 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_default_verify_paths 71 1_1_0d EXIST::FUNCTION:
SSL_set_msg_callback 72 1_1_0d EXIST::FUNCTION:
SSL_COMP_get0_name 73 1_1_0d EXIST::FUNCTION:
SSL_CTX_get0_security_ex_data 74 1_1_0d EXIST::FUNCTION:
PEM_read_bio_SSL_SESSION 75 1_1_0d EXIST::FUNCTION:
SSL_CIPHER_standard_name 76 1_1_0d EXIST::FUNCTION:SSL_TRACE
SSL_CTX_set_security_callback 77 1_1_0d EXIST::FUNCTION:
SSL_is_gmtls 78 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_default_verify_dir 79 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_cipher_list 80 1_1_0d EXIST::FUNCTION:
SSL_set_default_read_buffer_len 81 1_1_0d EXIST::FUNCTION:
SSL_CTX_use_certificate_chain_file 82 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_srp_cb_arg 83 1_1_0d EXIST::FUNCTION:SRP
SSL_want 84 1_1_0d EXIST::FUNCTION:
SSL_clear 85 1_1_0d EXIST::FUNCTION:
SSL_SESSION_get_compress_id 86 1_1_0d EXIST::FUNCTION:
SSL_pending 87 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_psk_client_callback 88 1_1_0d EXIST::FUNCTION:PSK
SSL_new 89 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_timeout 90 1_1_0d EXIST::FUNCTION:
SSL_set_security_level 91 1_1_0d EXIST::FUNCTION:
SSL_get_read_ahead 92 1_1_0d EXIST::FUNCTION:
SSL_SESSION_print_keylog 93 1_1_0d EXIST::FUNCTION:
BIO_new_ssl 94 1_1_0d EXIST::FUNCTION:
SSL_get_srp_username 95 1_1_0d EXIST::FUNCTION:SRP
SSL_CONF_CTX_finish 96 1_1_0d EXIST::FUNCTION:
SRP_Calc_A_param 97 1_1_0d EXIST::FUNCTION:SRP
SSL_trace 98 1_1_0d EXIST::FUNCTION:SSL_TRACE
SSL_SESSION_get_ex_data 99 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_msg_callback 100 1_1_0d EXIST::FUNCTION:
SSL_set_verify_depth 101 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_alpn_select_cb 102 1_1_0d EXIST::FUNCTION:
TLSv1_1_method 103 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_1_METHOD
SSL_CTX_get_security_level 104 1_1_0d EXIST::FUNCTION:
SSL_connect 105 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_ex_data 106 1_1_0d EXIST::FUNCTION:
SSL_get_client_CA_list 107 1_1_0d EXIST::FUNCTION:
SSL_use_RSAPrivateKey_ASN1 108 1_1_0d EXIST::FUNCTION:RSA
SSL_CONF_CTX_clear_flags 109 1_1_0d EXIST::FUNCTION:
SSL_set_verify 110 1_1_0d EXIST::FUNCTION:
SSL_use_RSAPrivateKey 111 1_1_0d EXIST::FUNCTION:RSA
SSL_set1_host 112 1_1_0d EXIST::FUNCTION:
SSL_CTX_get0_ctlog_store 113 1_1_0d EXIST::FUNCTION:CT
SSL_CTX_get_security_callback 114 1_1_0d EXIST::FUNCTION:
SSL_set_read_ahead 115 1_1_0d EXIST::FUNCTION:
SSL_CTX_enable_ct 116 1_1_0d EXIST::FUNCTION:CT
SSL_get_srp_N 117 1_1_0d EXIST::FUNCTION:SRP
SSL_up_ref 118 1_1_0d EXIST::FUNCTION:
SSL_set_default_passwd_cb 119 1_1_0d EXIST::FUNCTION:
SSL_use_certificate_file 120 1_1_0d EXIST::FUNCTION:
SSL_dup 121 1_1_0d EXIST::FUNCTION:
SSL_CTX_use_psk_identity_hint 122 1_1_0d EXIST::FUNCTION:PSK
SSL_get_rbio 123 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_srp_verify_param_callback 124 1_1_0d EXIST::FUNCTION:SRP
SSL_CIPHER_get_id 125 1_1_0d EXIST::FUNCTION:
SSL_renegotiate_pending 126 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_trust 127 1_1_0d EXIST::FUNCTION:
SSL_get0_next_proto_negotiated 128 1_1_0d EXIST::FUNCTION:NEXTPROTONEG
SSL_CTX_set_srp_strength 129 1_1_0d EXIST::FUNCTION:SRP
SSL_state_string 130 1_1_0d EXIST::FUNCTION:
SSL_CTX_load_verify_locations 131 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_srp_password 132 1_1_0d EXIST::FUNCTION:SRP
SSL_CTX_set_session_id_context 133 1_1_0d EXIST::FUNCTION:
SSL_CTX_up_ref 134 1_1_0d EXIST::FUNCTION:
GMTLS_method 135 1_1_0d EXIST::FUNCTION:GMTLS
SSL_is_server 136 1_1_0d EXIST::FUNCTION:
SSL_set_trust 137 1_1_0d EXIST::FUNCTION:
SSL_get_ex_data_X509_STORE_CTX_idx 138 1_1_0d EXIST::FUNCTION:
SSL_COMP_get_id 139 1_1_0d EXIST::FUNCTION:
SSL_write 140 1_1_0d EXIST::FUNCTION:
SSL_CTX_get0_privatekey 141 1_1_0d EXIST::FUNCTION:
SSL_alert_type_string_long 142 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_tlsext_use_srtp 143 1_1_0d EXIST::FUNCTION:SRTP
SSL_select_next_proto 144 1_1_0d EXIST::FUNCTION:
SSL_use_PrivateKey_ASN1 145 1_1_0d EXIST::FUNCTION:
TLS_method 146 1_1_0d EXIST::FUNCTION:
SSL_use_PrivateKey_file 147 1_1_0d EXIST::FUNCTION:
SSL_CTX_config 148 1_1_0d EXIST::FUNCTION:
SSL_CTX_get0_param 149 1_1_0d EXIST::FUNCTION:
SSL_get_client_random 150 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_ssl_version 151 1_1_0d EXIST::FUNCTION:
SSL_client_version 152 1_1_0d EXIST::FUNCTION:
SSL_CTX_use_PrivateKey_ASN1 153 1_1_0d EXIST::FUNCTION:
SSL_alert_type_string 154 1_1_0d EXIST::FUNCTION:
SSL_check_private_key 155 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_info_callback 156 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_psk_server_callback 157 1_1_0d EXIST::FUNCTION:PSK
TLSv1_2_method 158 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_2_METHOD
SSL_accept 159 1_1_0d EXIST::FUNCTION:
SSL_get_privatekey 160 1_1_0d EXIST::FUNCTION:
SSL_get0_dane_tlsa 161 1_1_0d EXIST::FUNCTION:
SSL_use_certificate 162 1_1_0d EXIST::FUNCTION:
SSL_get_sigalgs 163 1_1_0d EXIST::FUNCTION:
SSL_set_fd 164 1_1_0d EXIST::FUNCTION:SOCK
SSL_get_ciphers 165 1_1_0d EXIST::FUNCTION:
SSL_add_file_cert_subjects_to_stack 166 1_1_0d EXIST::FUNCTION:
SSL_get_srp_g 167 1_1_0d EXIST::FUNCTION:SRP
SSL_get_all_async_fds 168 1_1_0d EXIST::FUNCTION:
SSL_load_client_CA_file 169 1_1_0d EXIST::FUNCTION:
SSL_get_certificate 170 1_1_0d EXIST::FUNCTION:
PEM_write_bio_SSL_SESSION 171 1_1_0d EXIST::FUNCTION:
SSL_get1_session 172 1_1_0d EXIST::FUNCTION:
SSL_CIPHER_get_bits 173 1_1_0d EXIST::FUNCTION:
SSL_CTX_add_server_custom_ext 174 1_1_0d EXIST::FUNCTION:
SSL_get_default_passwd_cb_userdata 175 1_1_0d EXIST::FUNCTION:
GMTLS_client_method 176 1_1_0d EXIST::FUNCTION:GMTLS
SSL_CTX_use_PrivateKey 177 1_1_0d EXIST::FUNCTION:
SSL_set_srp_server_param_pw 178 1_1_0d EXIST::FUNCTION:SRP
SSL_SRP_CTX_init 179 1_1_0d EXIST::FUNCTION:SRP
SSL_SESSION_get0_id_context 180 1_1_0d EXIST::FUNCTION:
SSL_get_wfd 181 1_1_0d EXIST::FUNCTION:
DTLSv1_2_client_method 182 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,DTLS1_2_METHOD
SSL_clear_options 183 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_options 184 1_1_0d EXIST::FUNCTION:
SSL_CTX_has_client_custom_ext 185 1_1_0d EXIST::FUNCTION:
SSL_CIPHER_description 186 1_1_0d EXIST::FUNCTION:
SSL_CTX_use_certificate 187 1_1_0d EXIST::FUNCTION:
SSL_set_default_passwd_cb_userdata 188 1_1_0d EXIST::FUNCTION:
SSL_add_dir_cert_subjects_to_stack 189 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_cert_store 190 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_ctlog_list_file 191 1_1_0d EXIST::FUNCTION:CT
SSL_CTX_set_cert_verify_callback 192 1_1_0d EXIST::FUNCTION:
SSL_get_srtp_profiles 193 1_1_0d EXIST::FUNCTION:SRTP
SSL_SESSION_set_timeout 194 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_client_CA_list 195 1_1_0d EXIST::FUNCTION:
SSL_get_error 196 1_1_0d EXIST::FUNCTION:
SSL_get_verify_depth 197 1_1_0d EXIST::FUNCTION:
SSL_CTX_get0_certificate 198 1_1_0d EXIST::FUNCTION:
SSL_CTX_add_client_custom_ext 199 1_1_0d EXIST::FUNCTION:
SSL_CIPHER_get_cipher_nid 200 1_1_0d EXIST::FUNCTION:
SSL_in_init 201 1_1_0d EXIST::FUNCTION:
SSL_CTX_callback_ctrl 202 1_1_0d EXIST::FUNCTION:
SSL_CTX_sess_get_remove_cb 203 1_1_0d EXIST::FUNCTION:
SSL_CTX_use_certificate_ASN1 204 1_1_0d EXIST::FUNCTION:
SSL_CTX_ct_is_enabled 205 1_1_0d EXIST::FUNCTION:CT
SSL_get0_param 206 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_cookie_verify_cb 207 1_1_0d EXIST::FUNCTION:
SSL_get_servername 208 1_1_0d EXIST::FUNCTION:
SSL_CTX_dane_enable 209 1_1_0d EXIST::FUNCTION:
SSL_check_chain 210 1_1_0d EXIST::FUNCTION:
SSL_get_ssl_method 211 1_1_0d EXIST::FUNCTION:
SSL_get_servername_type 212 1_1_0d EXIST::FUNCTION:
SSL_ct_is_enabled 213 1_1_0d EXIST::FUNCTION:CT
SSL_use_certificate_chain_file 214 1_1_0d EXIST::FUNCTION:
SSL_get1_supported_ciphers 215 1_1_0d EXIST::FUNCTION:
SSL_SESSION_print_fp 216 1_1_0d EXIST::FUNCTION:STDIO
SSL_is_init_finished 217 1_1_0d EXIST::FUNCTION:
SSL_get_server_random 218 1_1_0d EXIST::FUNCTION:
SSL_CONF_cmd_argv 219 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_default_ctlog_list_file 220 1_1_0d EXIST::FUNCTION:CT
SSL_CTX_set_purpose 221 1_1_0d EXIST::FUNCTION:
SSL_get_srp_userinfo 222 1_1_0d EXIST::FUNCTION:SRP
SSL_get_SSL_CTX 223 1_1_0d EXIST::FUNCTION:
GMTLS_server_method 224 1_1_0d EXIST::FUNCTION:GMTLS
SSL_COMP_set0_compression_methods 225 1_1_0d EXIST::FUNCTION:
SSL_session_reused 226 1_1_0d EXIST::FUNCTION:
SSL_SESSION_get_timeout 227 1_1_0d EXIST::FUNCTION:
SSL_peek 228 1_1_0d EXIST::FUNCTION:
SSLv3_client_method 229 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,SSL3_METHOD
SSL_CONF_CTX_set1_prefix 230 1_1_0d EXIST::FUNCTION:
SSL_set_wfd 231 1_1_0d EXIST::FUNCTION:SOCK
SSL_set_session_ticket_ext 232 1_1_0d EXIST::FUNCTION:
DTLSv1_2_method 233 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,DTLS1_2_METHOD
SSL_set_hostflags 234 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_verify_mode 235 1_1_0d EXIST::FUNCTION:
TLSv1_client_method 236 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_METHOD
SSL_set_ct_validation_callback 237 1_1_0d EXIST::FUNCTION:CT
SSL_CTX_set_alpn_protos 238 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_verify_callback 239 1_1_0d EXIST::FUNCTION:
SSL_get0_peer_scts 240 1_1_0d EXIST::FUNCTION:CT
TLSv1_1_client_method 241 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_1_METHOD
SSL_use_PrivateKey 242 1_1_0d EXIST::FUNCTION:
SSL_add_client_CA 243 1_1_0d EXIST::FUNCTION:
SSL_CTX_sess_set_get_cb 244 1_1_0d EXIST::FUNCTION:
SSL_renegotiate 245 1_1_0d EXIST::FUNCTION:
BIO_f_ssl 246 1_1_0d EXIST::FUNCTION:
SSL_set_alpn_protos 247 1_1_0d EXIST::FUNCTION:
SSL_CONF_CTX_set_ssl_ctx 248 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_timeout 249 1_1_0d EXIST::FUNCTION:
SSL_SESSION_up_ref 250 1_1_0d EXIST::FUNCTION:
SSL_CTX_use_RSAPrivateKey 251 1_1_0d EXIST::FUNCTION:RSA
SSL_CTX_get_options 252 1_1_0d EXIST::FUNCTION:
SSL_SESSION_get_ticket_lifetime_hint 253 1_1_0d EXIST::FUNCTION:
SSL_get_security_callback 254 1_1_0d EXIST::FUNCTION:
PEM_write_SSL_SESSION 255 1_1_0d EXIST::FUNCTION:STDIO
SSL_get_psk_identity_hint 256 1_1_0d EXIST::FUNCTION:PSK
SSL_CTX_set_verify 257 1_1_0d EXIST::FUNCTION:
SSL_CTX_add_client_CA 258 1_1_0d EXIST::FUNCTION:
SSL_SESSION_get_protocol_version 259 1_1_0d EXIST::FUNCTION:
SSL_CTX_dane_clear_flags 260 1_1_0d EXIST::FUNCTION:
SSL_SESSION_free 261 1_1_0d EXIST::FUNCTION:
SSL_get_verify_callback 262 1_1_0d EXIST::FUNCTION:
SSL_CTX_remove_session 263 1_1_0d EXIST::FUNCTION:
SSL_CTX_check_private_key 264 1_1_0d EXIST::FUNCTION:
SSL_set_session_secret_cb 265 1_1_0d EXIST::FUNCTION:
SSL_set_quiet_shutdown 266 1_1_0d EXIST::FUNCTION:
OPENSSL_init_ssl 267 1_1_0d EXIST::FUNCTION:
SSL_CTX_clear_options 268 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_client_cert_engine 269 1_1_0d EXIST::FUNCTION:ENGINE
SSL_enable_ct 270 1_1_0d EXIST::FUNCTION:CT
SSL_CTX_set_cookie_generate_cb 271 1_1_0d EXIST::FUNCTION:
SSL_CTX_dane_mtype_set 272 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_srp_username_callback 273 1_1_0d EXIST::FUNCTION:SRP
SSL_get_current_cipher 274 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_default_passwd_cb 275 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_ciphers 276 1_1_0d EXIST::FUNCTION:
SSL_export_keying_material 277 1_1_0d EXIST::FUNCTION:
SSL_CONF_CTX_set_flags 278 1_1_0d EXIST::FUNCTION:
SSL_CTX_free 279 1_1_0d EXIST::FUNCTION:
SSL_COMP_add_compression_method 280 1_1_0d EXIST::FUNCTION:
SSL_SESSION_print 281 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_default_passwd_cb_userdata 282 1_1_0d EXIST::FUNCTION:
SSL_get_peer_cert_chain 283 1_1_0d EXIST::FUNCTION:
SSL_test_functions 284 1_1_0d EXIST::FUNCTION:UNIT_TEST
SSL_get_security_level 285 1_1_0d EXIST::FUNCTION:
DTLSv1_client_method 286 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,DTLS1_METHOD
SSL_CTX_set_next_protos_advertised_cb 287 1_1_0d EXIST::FUNCTION:NEXTPROTONEG
SSL_CTX_set0_security_ex_data 288 1_1_0d EXIST::FUNCTION:
SSL_set0_rbio 289 1_1_0d EXIST::FUNCTION:
SSL_get_cipher_list 290 1_1_0d EXIST::FUNCTION:
SSL_SESSION_set1_id_context 291 1_1_0d EXIST::FUNCTION:
SSL_SESSION_get0_cipher 292 1_1_0d EXIST::FUNCTION:
SSL_SESSION_get0_hostname 293 1_1_0d EXIST::FUNCTION:
SSL_SESSION_get_master_key 294 1_1_0d EXIST::FUNCTION:
SSL_CTX_new 295 1_1_0d EXIST::FUNCTION:
SSL_get_current_expansion 296 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_verify_depth 297 1_1_0d EXIST::FUNCTION:
SSL_state_string_long 298 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_generate_session_id 299 1_1_0d EXIST::FUNCTION:
SSL_CTX_sess_set_new_cb 300 1_1_0d EXIST::FUNCTION:
SSL_get0_alpn_selected 301 1_1_0d EXIST::FUNCTION:
SSL_CIPHER_get_auth_nid 302 1_1_0d EXIST::FUNCTION:
SSL_set0_security_ex_data 303 1_1_0d EXIST::FUNCTION:
SSL_get0_security_ex_data 304 1_1_0d EXIST::FUNCTION:
SSL_CIPHER_is_aead 305 1_1_0d EXIST::FUNCTION:
TLS_server_method 306 1_1_0d EXIST::FUNCTION:
BIO_ssl_shutdown 307 1_1_0d EXIST::FUNCTION:
SSL_set_bio 308 1_1_0d EXIST::FUNCTION:
SSL_get_selected_srtp_profile 309 1_1_0d EXIST::FUNCTION:SRTP
SSL_get_options 310 1_1_0d EXIST::FUNCTION:
TLSv1_2_client_method 311 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_2_METHOD
SSL_COMP_get_name 312 1_1_0d EXIST::FUNCTION:
SSL_get_session 313 1_1_0d EXIST::FUNCTION:
DTLS_method 314 1_1_0d EXIST::FUNCTION:
SSL_set_cipher_list 315 1_1_0d EXIST::FUNCTION:
SSL_add_ssl_module 316 1_1_0d EXIST::FUNCTION:
SSL_SESSION_get0_ticket 317 1_1_0d EXIST::FUNCTION:
SSL_SESSION_new 318 1_1_0d EXIST::FUNCTION:
SSL_CTX_dane_set_flags 319 1_1_0d EXIST::FUNCTION:
TLSv1_method 320 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_METHOD
SSL_get_quiet_shutdown 321 1_1_0d EXIST::FUNCTION:
DTLS_server_method 322 1_1_0d EXIST::FUNCTION:
SSL_rstate_string_long 323 1_1_0d EXIST::FUNCTION:
SSL_dup_CA_list 324 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_not_resumable_session_callback 325 1_1_0d EXIST::FUNCTION:
SSL_get0_verified_chain 326 1_1_0d EXIST::FUNCTION:
SSL_read 327 1_1_0d EXIST::FUNCTION:
SSL_is_dtls 328 1_1_0d EXIST::FUNCTION:
SSL_CTX_add_session 329 1_1_0d EXIST::FUNCTION:
SSL_get_default_passwd_cb 330 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_ssl_method 331 1_1_0d EXIST::FUNCTION:
DTLSv1_listen 332 1_1_0d EXIST::FUNCTION:SOCK
SSL_alert_desc_string 333 1_1_0d EXIST::FUNCTION:
SSL_set_generate_session_id 334 1_1_0d EXIST::FUNCTION:
SSLv3_method 335 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,SSL3_METHOD
SSL_get_shared_sigalgs 336 1_1_0d EXIST::FUNCTION:
SSL_get_verify_mode 337 1_1_0d EXIST::FUNCTION:
SSL_CTX_flush_sessions 338 1_1_0d EXIST::FUNCTION:
SSL_set_SSL_CTX 339 1_1_0d EXIST::FUNCTION:
SSL_get_default_timeout 340 1_1_0d EXIST::FUNCTION:
SSL_CTX_use_serverinfo 341 1_1_0d EXIST::FUNCTION:
DTLSv1_method 342 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,DTLS1_METHOD
SSL_CONF_cmd 343 1_1_0d EXIST::FUNCTION:
SSL_set_ex_data 344 1_1_0d EXIST::FUNCTION:
TLSv1_1_server_method 345 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_1_METHOD
SSL_get0_peername 346 1_1_0d EXIST::FUNCTION:
SSL_get_psk_identity 347 1_1_0d EXIST::FUNCTION:PSK
SSL_set_not_resumable_session_callback 348 1_1_0d EXIST::FUNCTION:
SSL_use_certificate_ASN1 349 1_1_0d EXIST::FUNCTION:
SSL_CIPHER_find 350 1_1_0d EXIST::FUNCTION:
SSL_set_security_callback 351 1_1_0d EXIST::FUNCTION:
SSL_CTX_use_RSAPrivateKey_ASN1 352 1_1_0d EXIST::FUNCTION:RSA
SSL_CONF_CTX_free 353 1_1_0d EXIST::FUNCTION:
SSL_set_tmp_dh_callback 354 1_1_0d EXIST::FUNCTION:DH
SSL_CTX_SRP_CTX_free 355 1_1_0d EXIST::FUNCTION:SRP
i2d_SSL_SESSION 356 1_1_0d EXIST::FUNCTION:
BIO_ssl_copy_session_id 357 1_1_0d EXIST::FUNCTION:
SSL_has_matching_session_id 358 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_srp_username 359 1_1_0d EXIST::FUNCTION:SRP
SSL_CTX_get_ex_data 360 1_1_0d EXIST::FUNCTION:
SSL_CIPHER_get_name 361 1_1_0d EXIST::FUNCTION:
SSL_CONF_cmd_value_type 362 1_1_0d EXIST::FUNCTION:
SSL_set_connect_state 363 1_1_0d EXIST::FUNCTION:
SSL_CTX_use_certificate_file 364 1_1_0d EXIST::FUNCTION:
SSL_SESSION_get_time 365 1_1_0d EXIST::FUNCTION:
SSL_CTX_set0_ctlog_store 366 1_1_0d EXIST::FUNCTION:CT
BIO_new_buffer_ssl_connect 367 1_1_0d EXIST::FUNCTION:
SSL_dane_set_flags 368 1_1_0d EXIST::FUNCTION:
SSL_set_options 369 1_1_0d EXIST::FUNCTION:
SSL_get_shutdown 370 1_1_0d EXIST::FUNCTION:
SSL_alert_desc_string_long 371 1_1_0d EXIST::FUNCTION:
SSL_COMP_get_compression_methods 372 1_1_0d EXIST::FUNCTION:
SSL_use_RSAPrivateKey_file 373 1_1_0d EXIST::FUNCTION:RSA
SSL_srp_server_param_with_username 374 1_1_0d EXIST::FUNCTION:SRP
SSL_has_pending 375 1_1_0d EXIST::FUNCTION:
SSL_SESSION_get0_peer 376 1_1_0d EXIST::FUNCTION:
SSL_set_accept_state 377 1_1_0d EXIST::FUNCTION:
SSL_get_peer_finished 378 1_1_0d EXIST::FUNCTION:
SSL_certs_clear 379 1_1_0d EXIST::FUNCTION:
SSL_callback_ctrl 380 1_1_0d EXIST::FUNCTION:
SSL_get_version 381 1_1_0d EXIST::FUNCTION:
SSL_get_ex_data 382 1_1_0d EXIST::FUNCTION:
SSL_get_current_compression 383 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_default_read_buffer_len 384 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_ct_validation_callback 385 1_1_0d EXIST::FUNCTION:CT
SSL_shutdown 386 1_1_0d EXIST::FUNCTION:
SSL_get_fd 387 1_1_0d EXIST::FUNCTION:
SSL_get_rfd 388 1_1_0d EXIST::FUNCTION:
SSL_CTX_get_default_passwd_cb 389 1_1_0d EXIST::FUNCTION:
SSL_version 390 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_quiet_shutdown 391 1_1_0d EXIST::FUNCTION:
TLSv1_2_server_method 392 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_2_METHOD
SSL_set_ssl_method 393 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_verify_depth 394 1_1_0d EXIST::FUNCTION:
SSL_CONF_CTX_set_ssl 395 1_1_0d EXIST::FUNCTION:
SSL_CTX_use_PrivateKey_file 396 1_1_0d EXIST::FUNCTION:
SSL_CIPHER_get_digest_nid 397 1_1_0d EXIST::FUNCTION:
SSL_set_psk_client_callback 398 1_1_0d EXIST::FUNCTION:PSK
SSL_SESSION_get_id 399 1_1_0d EXIST::FUNCTION:
SSL_set_cert_cb 400 1_1_0d EXIST::FUNCTION:
SSL_set1_param 401 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_security_level 402 1_1_0d EXIST::FUNCTION:
SSL_CTX_set_next_proto_select_cb 403 1_1_0d EXIST::FUNCTION:NEXTPROTONEG
SSL_CTX_get_quiet_shutdown 404 1_1_0d EXIST::FUNCTION:
TLSv1_server_method 405 1_1_0d EXIST::FUNCTION:DEPRECATEDIN_1_1_0,TLS1_METHOD
SSL_CTX_set_client_cert_cb 406 1_1_0d EXIST::FUNCTION:
SSL_free 407 1_1_0d EXIST::FUNCTION:
SSL_config 408 1_1_0d EXIST::FUNCTION:
SSL_dane_tlsa_add 409 1_1_0d EXIST::FUNCTION:
SSL_CTX_sess_get_get_cb 410 1_1_0d EXIST::FUNCTION:
SSL_CTX_use_RSAPrivateKey_file 411 1_1_0d EXIST::FUNCTION:RSA

View File

@@ -135,7 +135,7 @@ my @known_algorithms = ( "RC2", "RC4", "RC5", "IDEA", "DES", "BF",
# GmSSL
"SM3", "SMS4", "KDF2", "ECIES", "FFX", "SM2", "PAILLIER", "CPK", "OTP", "GMAPI", "EC2",
"BFIBE", "BB1IBE", "SM9", "SAF", "SDF", "SKF", "SOF", "ZUC", "SERPENT", "SPECK", "BASE58",
"GMTLS", "GMTLS_METHOD", "CA", "MACRO", "ASYNC"
"GMTLS", "GMTLS_METHOD", "CA", "MACRO", "ASYNC", "ECRS"
);
my %disabled_algorithms;
@@ -345,6 +345,7 @@ $crypto.=" include/openssl/ssf33.h";
$crypto.=" include/openssl/zuc.h";
$crypto.=" include/openssl/serpent.h";
$crypto.=" include/openssl/speck.h";
$crypto.=" include/openssl/ecrs.h";
my $symhacks="include/openssl/symhacks.h";