> > > - reduced rsa struct to only necessary fields. > > > RSA operation is generally used with one input and one output. > > > One exception for this is signature verification, when RSA verify > > > called, both message and signature are inputs, but there is no rsa > > > output except for op status. > > > > I am not sure if this is the correct renaming of fields. > > > > You are changing the name of message -> input and Cipher and sign -> > > output/message union. Right? > > > > I believe this would impact the existing applications and Would create > confusion > > as the message was used for input and now it is In union with output. > [Arek] - Yes, this will impact current apps. And yes, message may be > confusing. > But main question, is there consensus for the Input - Output approach in RSA? > If > not I will drop it from v2. > If so, in case SIGNATURE_VERIFY and PADDING_NONE decrypted signature > should be placed in message or cipher with no further PMD involvement.
++Kiran > > > > > The logic listed here is looking very complex. > > Please simplify it. Can you try adding comments in the description of struct > > Instead of individual fields. > > > > > > Signed-off-by: Arek Kusztal <arkadiuszx.kusz...@intel.com> > > > --- > > > lib/cryptodev/rte_crypto_asym.h | 87 > > > +++++++++++++++++++++++---------------- > > > -- > > > 1 file changed, 50 insertions(+), 37 deletions(-) > > > > > > diff --git a/lib/cryptodev/rte_crypto_asym.h > > > b/lib/cryptodev/rte_crypto_asym.h index c864b8a115..37dd3b9d86 100644 > > > --- a/lib/cryptodev/rte_crypto_asym.h > > > +++ b/lib/cryptodev/rte_crypto_asym.h > > > @@ -362,53 +362,66 @@ struct rte_crypto_rsa_op_param { > > > enum rte_crypto_asym_op_type op_type; > > > /**< Type of RSA operation for transform */ > > > > > > - rte_crypto_param message; > > > + rte_crypto_param input; > > > /**< > > > - * Pointer to input data > > > - * - to be encrypted for RSA public encrypt. > > > - * - to be signed for RSA sign generation. > > > - * - to be authenticated for RSA sign verification. > > > + * When op_type == RTE_CRYPTO_ASYM_OP_ENCRYPT: > > > + * If padding.type = RTE_CRYPTO_RSA_PADDING_NONE > > > + * input should only be used along with cryptographically > > > + * secure padding scheme. > > > + * If padding.type = RTE_CRYPTO_RSA_PADDING_PKCS1_5 > > > + * input shall be no longer than public modulus minus 11. > > > + * If padding.type = RTE_CRYPTO_RSA_PADDING_OAEP > > > + * input shall be no longer than public modulus - > > > + * 2 * len(hash) - 2. > > > + * When op_type == RTE_CRYPTO_ASYM_OP_SIGN: > > > * > > > - * Pointer to output data > > > - * - for RSA private decrypt. > > > - * In this case the underlying array should have been > > > - * allocated with enough memory to hold plaintext output > > > - * (i.e. must be at least RSA key size). The message.length > > > - * field should be 0 and will be overwritten by the PMD > > > - * with the decrypted length. > > > + * If padding.type = RTE_CRYPTO_RSA_PADDING_NONE > > > + * input should only be used along with cryptographically > > > + * secure padding scheme. * > > > + * If padding.type = RTE_CRYPTO_RSA_PADDING_PKCS1_5 or > > > + * RTE_CRYPTO_RSA_PADDING_PSS > > > + * if the RTE_CRYPTO_RSA_FLAG_PT flag is set, input shall contain > > > + * the message to be signed, if this flag is not set, > > > + * input shall contain the digest of the message to be signed. > > > > Does it mean if padding.type = RTE_CRYPTO_RSA_PADDING_PKCS1_5 or > > RTE_CRYPTO_RSA_PADDING_PSS and if RTE_CRYPTO_RSA_FLAG_PT flag is > set > [Arek] - this one will be out, no one probably will come asking for this > functionality anyway. > > > > > * > > > - * All data is in Octet-string network byte order format. > > > - */ > > > - > > > - rte_crypto_param cipher; > > > - /**< > > > - * Pointer to input data > > > - * - to be decrypted for RSA private decrypt. > > > + * When op_type == RTE_CRYPTO_ASYM_OP_DECRYPT: > > > * > > > - * Pointer to output data > > > - * - for RSA public encrypt. > > > - * In this case the underlying array should have been allocated > > > - * with enough memory to hold ciphertext output (i.e. must be > > > - * at least RSA key size). The cipher.length field should > > > - * be 0 and will be overwritten by the PMD with the encrypted length. > > > + * Input shall contain previously encrypted RSA message. > > > * > > > - * All data is in Octet-string network byte order format. > > > + * When op_type == RTE_CRYPTO_ASYM_OP_VERIFY: > > > + * > > > + * Input shall contain signature to be verified > > > */ > > > - > > > - rte_crypto_param sign; > > > + union { > > > + rte_crypto_param output; > > > + rte_crypto_param message; > > > + }; > > > /**< > > > - * Pointer to input data > > > - * - to be verified for RSA public decrypt. > > > + * When op_type == RTE_CRYPTO_ASYM_OP_ENCRYPT: > > > + * > > > + * Output shall contain encrypted data, output.length shall > > > + * be set to the length of encrypted data. > > > + * > > > + * When op_type == > > > RTE_CRYPTO_ASYM_OP_DECRYPT/RTE_CRYPTO_ASYM_OP_SIGN: > > > * > > > - * Pointer to output data > > > - * - for RSA private encrypt. > > > - * In this case the underlying array should have been allocated > > > - * with enough memory to hold signature output (i.e. must be > > > - * at least RSA key size). The sign.length field should > > > - * be 0 and will be overwritten by the PMD with the signature length. > > > + * If padding.type = RTE_CRYPTO_RSA_PADDING_NONE > > > + * output shall contain decrypted/signed data, but all leading zeros > > > + * shall be preserved. Therefore output.length should be > > > + * equal to the length of the modulus.. > > > + * For other types of padding, output should contain > > > + * decrypted data, and output.length shall be set to the length > > > + * of decrypted data. > > > * > > > - * All data is in Octet-string network byte order format. > > > + * When op_type == RTE_CRYPTO_ASYM_OP_VERIFY: > > > + * > > > + * If padding.type = RTE_CRYPTO_RSA_PADDING_NONE > > > + * output shall contain the public key decrypted signature. > > > + * All leading zeroes shall be preserved. > > > + * > > > + * For other padding types, the message should be set with data for the > > > + * signature to be compared with. > > > */ > > > + > > > struct rte_crypto_rsa_padding padding; > > > /**< RSA padding information */ > > > > > > -- > > > 2.13.6