xref: /linux/include/crypto/internal/rsa.h (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
1*2874c5fdSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
2cfc2bb32STadeusz Struk /*
3cfc2bb32STadeusz Struk  * RSA internal helpers
4cfc2bb32STadeusz Struk  *
5cfc2bb32STadeusz Struk  * Copyright (c) 2015, Intel Corporation
6cfc2bb32STadeusz Struk  * Authors: Tadeusz Struk <tadeusz.struk@intel.com>
7cfc2bb32STadeusz Struk  */
8cfc2bb32STadeusz Struk #ifndef _RSA_HELPER_
9cfc2bb32STadeusz Struk #define _RSA_HELPER_
105a7de973STudor Ambarus #include <linux/types.h>
11cfc2bb32STadeusz Struk 
125a7de973STudor Ambarus /**
135a7de973STudor Ambarus  * rsa_key - RSA key structure
145a7de973STudor Ambarus  * @n           : RSA modulus raw byte stream
155a7de973STudor Ambarus  * @e           : RSA public exponent raw byte stream
165a7de973STudor Ambarus  * @d           : RSA private exponent raw byte stream
178be0b84eSSalvatore Benedetto  * @p           : RSA prime factor p of n raw byte stream
188be0b84eSSalvatore Benedetto  * @q           : RSA prime factor q of n raw byte stream
198be0b84eSSalvatore Benedetto  * @dp          : RSA exponent d mod (p - 1) raw byte stream
208be0b84eSSalvatore Benedetto  * @dq          : RSA exponent d mod (q - 1) raw byte stream
218be0b84eSSalvatore Benedetto  * @qinv        : RSA CRT coefficient q^(-1) mod p raw byte stream
225a7de973STudor Ambarus  * @n_sz        : length in bytes of RSA modulus n
235a7de973STudor Ambarus  * @e_sz        : length in bytes of RSA public exponent
245a7de973STudor Ambarus  * @d_sz        : length in bytes of RSA private exponent
258be0b84eSSalvatore Benedetto  * @p_sz        : length in bytes of p field
268be0b84eSSalvatore Benedetto  * @q_sz        : length in bytes of q field
278be0b84eSSalvatore Benedetto  * @dp_sz       : length in bytes of dp field
288be0b84eSSalvatore Benedetto  * @dq_sz       : length in bytes of dq field
298be0b84eSSalvatore Benedetto  * @qinv_sz     : length in bytes of qinv field
305a7de973STudor Ambarus  */
31cfc2bb32STadeusz Struk struct rsa_key {
325a7de973STudor Ambarus 	const u8 *n;
335a7de973STudor Ambarus 	const u8 *e;
345a7de973STudor Ambarus 	const u8 *d;
358be0b84eSSalvatore Benedetto 	const u8 *p;
368be0b84eSSalvatore Benedetto 	const u8 *q;
378be0b84eSSalvatore Benedetto 	const u8 *dp;
388be0b84eSSalvatore Benedetto 	const u8 *dq;
398be0b84eSSalvatore Benedetto 	const u8 *qinv;
405a7de973STudor Ambarus 	size_t n_sz;
415a7de973STudor Ambarus 	size_t e_sz;
425a7de973STudor Ambarus 	size_t d_sz;
438be0b84eSSalvatore Benedetto 	size_t p_sz;
448be0b84eSSalvatore Benedetto 	size_t q_sz;
458be0b84eSSalvatore Benedetto 	size_t dp_sz;
468be0b84eSSalvatore Benedetto 	size_t dq_sz;
478be0b84eSSalvatore Benedetto 	size_t qinv_sz;
48cfc2bb32STadeusz Struk };
49cfc2bb32STadeusz Struk 
5022287b0bSTadeusz Struk int rsa_parse_pub_key(struct rsa_key *rsa_key, const void *key,
5122287b0bSTadeusz Struk 		      unsigned int key_len);
5222287b0bSTadeusz Struk 
5322287b0bSTadeusz Struk int rsa_parse_priv_key(struct rsa_key *rsa_key, const void *key,
54cfc2bb32STadeusz Struk 		       unsigned int key_len);
55cfc2bb32STadeusz Struk 
563d5b1ecdSAndrzej Zaborowski extern struct crypto_template rsa_pkcs1pad_tmpl;
57cfc2bb32STadeusz Struk #endif
58