Commit e14d6cf6 authored by Matt Caswell's avatar Matt Caswell
Browse files

Improve use of the test framework in the SM2 internal tests



Also general clean up of those tests

Reviewed-by: default avatarRichard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6386)
parent 44d3845d
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -223,8 +223,10 @@ static int pkey_ecies_encrypt(EVP_PKEY_CTX *ctx,
            md_type = NID_sm3;

        if (out == NULL) {
            *outlen = SM2_ciphertext_size(ec, EVP_get_digestbynid(md_type),
                                          inlen);
            if (!SM2_ciphertext_size(ec, EVP_get_digestbynid(md_type), inlen,
                                     outlen))
                ret = -1;
            else
                ret = 1;
        }
        else {
@@ -261,8 +263,10 @@ static int pkey_ecies_decrypt(EVP_PKEY_CTX *ctx,
            md_type = NID_sm3;

        if (out == NULL) {
            *outlen = SM2_plaintext_size(ec, EVP_get_digestbynid(md_type),
                                         inlen);
            if (!SM2_plaintext_size(ec, EVP_get_digestbynid(md_type), inlen,
                                    outlen))
                ret = -1;
            else
                ret = 1;
        }
        else {
+4 −8
Original line number Diff line number Diff line
@@ -57,13 +57,11 @@ int SM2_verify(int type, const unsigned char *dgst, int dgstlen,
/*
 * SM2 encryption
 */
size_t SM2_ciphertext_size(const EC_KEY *key,
                           const EVP_MD *digest,
                           size_t msg_len);
int SM2_ciphertext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len,
                        size_t *ct_size);

size_t SM2_plaintext_size(const EC_KEY *key,
                          const EVP_MD *digest,
                          size_t msg_len);
int SM2_plaintext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len,
                       size_t *pt_size);

int SM2_encrypt(const EC_KEY *key,
                const EVP_MD *digest,
@@ -76,8 +74,6 @@ int SM2_decrypt(const EC_KEY *key,
                const uint8_t *ciphertext,
                size_t ciphertext_len, uint8_t *ptext_buf, size_t *ptext_len);

int ERR_load_SM2_strings(void);

#  ifdef __cplusplus
}
#  endif
+29 −9
Original line number Diff line number Diff line
@@ -59,23 +59,43 @@ static size_t EC_field_size(const EC_GROUP *group)
    return field_size;
}

size_t SM2_plaintext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len)
int SM2_plaintext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len,
                       size_t *pt_size)
{
    const size_t field_size = EC_field_size(EC_KEY_get0_group(key));
    const size_t md_size = EVP_MD_size(digest);
    const int md_size = EVP_MD_size(digest);
    size_t overhead;

    const size_t overhead = 10 + 2 * field_size + md_size;
    if(msg_len <= overhead)
    if (md_size < 0) {
        SM2err(SM2_F_SM2_ENCRYPT, SM2_R_INVALID_DIGEST);
        return 0;
    }
    if (field_size == 0) {
        SM2err(SM2_F_SM2_ENCRYPT, SM2_R_INVALID_FIELD);
        return 0;
    }

    return msg_len - overhead;
    overhead = 10 + 2 * field_size + (size_t)md_size;
    if(msg_len <= overhead) {
        SM2err(SM2_F_SM2_ENCRYPT, SM2_R_INVALID_ENCODING);
        return 0;
    }

size_t SM2_ciphertext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len)
    *pt_size = msg_len - overhead;
    return 1;
}

int SM2_ciphertext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len,
                        size_t *ct_size)
{
    const size_t field_size = EC_field_size(EC_KEY_get0_group(key));
    const size_t md_size = EVP_MD_size(digest);
    return 10 + 2 * field_size + md_size + msg_len;
    const int md_size = EVP_MD_size(digest);

    if (field_size == 0 || md_size < 0)
        return 0;

    *ct_size = 10 + 2 * field_size + (size_t)md_size + msg_len;
    return 1;
}

int SM2_encrypt(const EC_KEY *key,
+4 −8
Original line number Diff line number Diff line
@@ -440,7 +440,7 @@ INCLUDE_MAIN___test_libtestutil_OLB = /INCLUDE=MAIN
      PROGRAMS_NO_INST=siphash_internal_test
    ENDIF
    IF[{- !$disabled{sm2} -}]
      PROGRAMS_NO_INST=sm2_crypt_internal_test sm2_sign_internal_test
      PROGRAMS_NO_INST=sm2_internal_test
    ENDIF
    IF[{- !$disabled{sm4} -}]
      PROGRAMS_NO_INST=sm4_internal_test
@@ -485,13 +485,9 @@ INCLUDE_MAIN___test_libtestutil_OLB = /INCLUDE=MAIN
    INCLUDE[siphash_internal_test]=.. ../include ../crypto/include
    DEPEND[siphash_internal_test]=../libcrypto.a libtestutil.a

    SOURCE[sm2_sign_internal_test]=sm2_sign_internal_test.c
    INCLUDE[sm2_sign_internal_test]=../include ../crypto/include
    DEPEND[sm2_sign_internal_test]=../libcrypto.a libtestutil.a

    SOURCE[sm2_crypt_internal_test]=sm2_crypt_internal_test.c
    INCLUDE[sm2_crypt_internal_test]=../include ../crypto/include
    DEPEND[sm2_crypt_internal_test]=../libcrypto.a libtestutil.a
    SOURCE[sm2_internal_test]=sm2_internal_test.c
    INCLUDE[sm2_internal_test]=../include ../crypto/include
    DEPEND[sm2_internal_test]=../libcrypto.a libtestutil.a

    SOURCE[sm4_internal_test]=sm4_internal_test.c
    INCLUDE[sm4_internal_test]=.. ../include ../crypto/include
+2 −2
Original line number Diff line number Diff line
@@ -11,9 +11,9 @@ use OpenSSL::Test; # get 'plan'
use OpenSSL::Test::Simple;
use OpenSSL::Test::Utils;

setup("test_sm2_sign_internal");
setup("test_internal_sm2");

plan skip_all => "This test is unsupported in a shared library build on Windows"
    if $^O eq 'MSWin32' && !disabled("shared");

simple_test("test_sm2_sign_internal", "sm2_sign_internal_test", "sm2");
simple_test("test_internal_sm2", "sm2_internal_test", "sm2");
Loading