mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-06-28 00:37:00 +08:00
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
56
apps/sm2.c
56
apps/sm2.c
@@ -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");
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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"},
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
456
crypto/ec/ecahe.c
Normal 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
2
crypto/ecrs/build.info
Normal 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
65
crypto/ecrs/ecrs_asn1.c
Normal 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
52
crypto/ecrs/ecrs_err.c
Normal 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
56
crypto/ecrs/ecrs_lcl.h
Normal 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
411
crypto/ecrs/ecrs_lib.c
Normal 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;
|
||||
}
|
||||
@@ -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"},
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
90
crypto/sm2/sm2_cosign.c
Normal 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;
|
||||
}
|
||||
@@ -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"},
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
79
doc/crypto/ECAHE_encrypt.pod
Normal file
79
doc/crypto/ECAHE_encrypt.pod
Normal 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
83
doc/crypto/ECRS_sign.pod
Normal 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
|
||||
63
doc/crypto/EVP_PKEY_CTX_set_paillier_keygen_bits.pod
Normal file
63
doc/crypto/EVP_PKEY_CTX_set_paillier_keygen_bits.pod
Normal 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
|
||||
72
doc/crypto/FFX_encrypt.pod
Normal file
72
doc/crypto/FFX_encrypt.pod
Normal 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
|
||||
74
doc/crypto/OTP_generate.pod
Normal file
74
doc/crypto/OTP_generate.pod
Normal 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
|
||||
90
doc/crypto/PAILLIER_new.pod
Normal file
90
doc/crypto/PAILLIER_new.pod
Normal 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
|
||||
42
doc/crypto/SM9_MASTER_KEY_new.pod
Normal file
42
doc/crypto/SM9_MASTER_KEY_new.pod
Normal 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
49
doc/crypto/SM9_setup.pod
Normal 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
|
||||
63
doc/crypto/ZUC_set_key.pod
Normal file
63
doc/crypto/ZUC_set_key.pod
Normal 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
|
||||
62
doc/crypto/sm3_hmac_init.pod
Normal file
62
doc/crypto/sm3_hmac_init.pod
Normal 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
67
doc/crypto/sm3_init.pod
Normal 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
|
||||
92
doc/crypto/sms4_set_encrypt_key.pod
Normal file
92
doc/crypto/sms4_set_encrypt_key.pod
Normal 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
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
74
include/openssl/ecahe.h
Normal 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
112
include/openssl/ecrs.h
Normal 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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
/*-
|
||||
|
||||
@@ -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
236
npapi/GmSSLObject.c
Normal 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
72
npapi/GmSSLObject.h
Normal 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
13
npapi/Makefile
Normal 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
175
npapi/PluginObject.c
Normal 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
72
npapi/PluginObject.h
Normal 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
20
npapi/example.html
Normal 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
203
npapi/main.c
Normal 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
892
npapi/npapi.h
Normal 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
237
npapi/npfunctions.h
Normal 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
339
npapi/npruntime.h
Normal 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
|
||||
@@ -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
117
test/ecrstest.c
Normal 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
|
||||
12
test/recipes/15-test_ecrs.t
Normal file
12
test/recipes/15-test_ecrs.t
Normal 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");
|
||||
10053
util/libcrypto.num
10053
util/libcrypto.num
File diff suppressed because it is too large
Load Diff
822
util/libssl.num
822
util/libssl.num
@@ -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
|
||||
|
||||
@@ -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";
|
||||
|
||||
Reference in New Issue
Block a user