1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * RSA internal helpers 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (c) 2015, Intel Corporation 6*4882a593Smuzhiyun * Authors: Tadeusz Struk <tadeusz.struk@intel.com> 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun #ifndef _RSA_HELPER_ 9*4882a593Smuzhiyun #define _RSA_HELPER_ 10*4882a593Smuzhiyun #include <linux/types.h> 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun /** 13*4882a593Smuzhiyun * rsa_key - RSA key structure 14*4882a593Smuzhiyun * @n : RSA modulus raw byte stream 15*4882a593Smuzhiyun * @e : RSA public exponent raw byte stream 16*4882a593Smuzhiyun * @d : RSA private exponent raw byte stream 17*4882a593Smuzhiyun * @p : RSA prime factor p of n raw byte stream 18*4882a593Smuzhiyun * @q : RSA prime factor q of n raw byte stream 19*4882a593Smuzhiyun * @dp : RSA exponent d mod (p - 1) raw byte stream 20*4882a593Smuzhiyun * @dq : RSA exponent d mod (q - 1) raw byte stream 21*4882a593Smuzhiyun * @qinv : RSA CRT coefficient q^(-1) mod p raw byte stream 22*4882a593Smuzhiyun * @n_sz : length in bytes of RSA modulus n 23*4882a593Smuzhiyun * @e_sz : length in bytes of RSA public exponent 24*4882a593Smuzhiyun * @d_sz : length in bytes of RSA private exponent 25*4882a593Smuzhiyun * @p_sz : length in bytes of p field 26*4882a593Smuzhiyun * @q_sz : length in bytes of q field 27*4882a593Smuzhiyun * @dp_sz : length in bytes of dp field 28*4882a593Smuzhiyun * @dq_sz : length in bytes of dq field 29*4882a593Smuzhiyun * @qinv_sz : length in bytes of qinv field 30*4882a593Smuzhiyun */ 31*4882a593Smuzhiyun struct rsa_key { 32*4882a593Smuzhiyun const u8 *n; 33*4882a593Smuzhiyun const u8 *e; 34*4882a593Smuzhiyun const u8 *d; 35*4882a593Smuzhiyun const u8 *p; 36*4882a593Smuzhiyun const u8 *q; 37*4882a593Smuzhiyun const u8 *dp; 38*4882a593Smuzhiyun const u8 *dq; 39*4882a593Smuzhiyun const u8 *qinv; 40*4882a593Smuzhiyun size_t n_sz; 41*4882a593Smuzhiyun size_t e_sz; 42*4882a593Smuzhiyun size_t d_sz; 43*4882a593Smuzhiyun size_t p_sz; 44*4882a593Smuzhiyun size_t q_sz; 45*4882a593Smuzhiyun size_t dp_sz; 46*4882a593Smuzhiyun size_t dq_sz; 47*4882a593Smuzhiyun size_t qinv_sz; 48*4882a593Smuzhiyun }; 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun int rsa_parse_pub_key(struct rsa_key *rsa_key, const void *key, 51*4882a593Smuzhiyun unsigned int key_len); 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun int rsa_parse_priv_key(struct rsa_key *rsa_key, const void *key, 54*4882a593Smuzhiyun unsigned int key_len); 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun extern struct crypto_template rsa_pkcs1pad_tmpl; 57*4882a593Smuzhiyun #endif 58