/* ==================================================================== * Copyright (c) 2016 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 #include #include #include #include "sm9_lcl.h" int SM9PrivateKey_get_gmtls_public_key(SM9PublicParameters *mpk, SM9PrivateKey *sk, unsigned char pub_key[1024]) { return 0; } int SM9PublicKey_get_gmtls_encoded(SM9PublicParameters *mpk, SM9PublicKey *pk, unsigned char encoded[1024]) { return 0; } int SM9_hash2(const EVP_MD *md, BIGNUM **r, const unsigned char *data, size_t datalen, const unsigned char *elem, size_t elemlen, const BIGNUM *range, BN_CTX *ctx) { unsigned char *buf; if (!(buf = OPENSSL_malloc(datalen + elemlen))) { return 0; } memcpy(buf, data, datalen); memcpy(buf + datalen, elem, elemlen); if (!BN_hash_to_range(md, r, buf, datalen + elemlen, range, ctx)) { OPENSSL_free(buf); return 0; } OPENSSL_free(buf); return 1; } int SM9_DigestInit(EVP_MD_CTX *ctx, unsigned char prefix, const EVP_MD *md, ENGINE *impl) { if (!EVP_DigestInit_ex(ctx, md, impl) || !EVP_DigestUpdate(ctx, &prefix, 1)) { ERR_print_errors_fp(stderr); return 0; } return 1; } #if 0 int SM9_DigestFinal(EVP_MD_CTX *ctx1, BIGNUM *h, const BIGNUM *n_1) { int ret = 0; EVP_MD_CTX *ctx2 = NULL; const unsigned char ct1[4] = {0x00, 0x00, 0x00, 0x01}; const unsigned char ct2[4] = {0x00, 0x00, 0x00, 0x02}; unsigned char Ha[EVP_MAX_MD_SIZE * 2]; unsigned int len = 0; if (!(ctx2 = EVP_MD_CTX_new()) || !EVP_MD_CTX_copy(ctx2, ctx1) || !EVP_DigestUpdate(ctx1, ct1, sizeof(ct)) || !EVP_DigestUpdate(ctx2, ct2, sizeof(ct2)) || !EVP_DigestFinal_ex(ctx1, Ha, &len) || !EVP_DigestFinal_ex(ctx2, Ha + len, &len) || !BN_bin2bn(Ha, 40, h) || !BN_mod(h, h, n_1, bn_ctx) || !BN_add_word(h, 1)) { ERR_print_errors_fp(stderr); goto end; } ret = 1; end: EVP_MD_CTX_free(ctx2); return ret; } #endif