/* * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ #include #include #include #include #include "internal/nelem.h" #include "crypto/evp.h" /* For the internal API */ #include "testutil.h" /* Array indexes used in test_fromdata_rsa */ #define N 0 #define E 1 #define D 2 #define P 3 #define Q 4 #define DP 5 #define DQ 6 #define QINV 7 static int test_fromdata_rsa(void) { int ret = 0; EVP_PKEY_CTX *ctx = NULL; EVP_PKEY *pk = NULL; /* * 32-bit RSA key, extracted from this command, * executed with OpenSSL 1.0.2: * * openssl genrsa 32 | openssl rsa -text */ static unsigned long key_numbers[] = { 0xbc747fc5, /* N */ 0x10001, /* E */ 0x7b133399, /* D */ 0xe963, /* P */ 0xceb7, /* Q */ 0x8599, /* DP */ 0xbd87, /* DQ */ 0xcc3b, /* QINV */ }; OSSL_PARAM fromdata_params[] = { OSSL_PARAM_ulong(OSSL_PKEY_PARAM_RSA_N, &key_numbers[N]), OSSL_PARAM_ulong(OSSL_PKEY_PARAM_RSA_E, &key_numbers[E]), OSSL_PARAM_ulong(OSSL_PKEY_PARAM_RSA_D, &key_numbers[D]), OSSL_PARAM_ulong(OSSL_PKEY_PARAM_RSA_FACTOR, &key_numbers[P]), OSSL_PARAM_ulong(OSSL_PKEY_PARAM_RSA_FACTOR, &key_numbers[Q]), OSSL_PARAM_ulong(OSSL_PKEY_PARAM_RSA_EXPONENT, &key_numbers[DP]), OSSL_PARAM_ulong(OSSL_PKEY_PARAM_RSA_EXPONENT, &key_numbers[DQ]), OSSL_PARAM_ulong(OSSL_PKEY_PARAM_RSA_COEFFICIENT, &key_numbers[QINV]), OSSL_PARAM_END }; if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_provided(NULL, "RSA", NULL))) goto err; if (!TEST_true(EVP_PKEY_key_fromdata_init(ctx)) || !TEST_true(EVP_PKEY_fromdata(ctx, &pk, fromdata_params))) goto err; /* * TODO(3.0) We can't do much more at this point without using internals, * because RSA functionality is still missing. When the time comes, it * would be nice to try and do something "useful" with this key, such * as signing a small piece of data. */ ret = 1; err: EVP_PKEY_free(pk); EVP_PKEY_CTX_free(ctx); return ret; } int setup_tests(void) { ADD_TEST(test_fromdata_rsa); return 1; }