This patch adds function to simulate pkcs1_5 padding, it serves nothing else than example. It provides no security and should not be used in security context.
Signed-off-by: Arek Kusztal <arkadiuszx.kusz...@intel.com> --- app/test/test_cryptodev_asym_util.h | 54 +++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/app/test/test_cryptodev_asym_util.h b/app/test/test_cryptodev_asym_util.h index b3d9fb4..f984166 100644 --- a/app/test/test_cryptodev_asym_util.h +++ b/app/test/test_cryptodev_asym_util.h @@ -1,10 +1,64 @@ /* SPDX-License-Identifier: BSD-3-Clause * Copyright(c) 2018 Cavium Networks + * Copyright (c) 2019 Intel Corporation */ #ifndef TEST_CRYPTODEV_ASYM_TEST_UTIL_H__ #define TEST_CRYPTODEV_ASYM_TEST_UTIL_H__ +/* + * Two functions below simulate pkcs 1.5 padding and serves only as an example, + * both offer no security. + */ +static inline int rsa_simulate_pkcs1_5_padding(int op, uint8_t *p, + int key_size, const uint8_t *src, int len) { + + int ps_len; + + if (len > key_size - 11) + return -1; + ps_len = key_size - len - 3; + + *(p++) = 0; + *(p++) = op ? 1 : 2; + if (op) { + while (ps_len--) + *(p++) = 0xFF; + } else { + while (ps_len--) { + *p = (uint8_t)rand(); + *p ^= !(*p); + p++; + } + } + + *(p++) = 0; + memcpy(p, src, len); + + return 0; +} + +static inline int rsa_simulate_strip_pkcs1_5_padding(uint8_t *src, + int key_size) { + uint8_t tmp[key_size], *orig_src = src; + int i = 1; + ++src; + while (*(src) && i < key_size) { + ++i; + ++src; + } + if (i == key_size) + return -1; + + ++i; + ++src; + + memcpy(tmp, src, key_size - i); + memcpy(orig_src, tmp, key_size - i); + return key_size - i; +} + + /* Below Apis compare resulted buffer to original test vector */ static inline int rsa_verify(struct rsa_test_data *rsa_param, -- 2.1.0