blob: 9e8f1590de98026f616f93dddbcbd89fe27af61f [file] [log] [blame]
Tadeusz Strukcfc2bb32015-06-16 10:31:01 -07001/*
2 * RSA internal helpers
3 *
4 * Copyright (c) 2015, Intel Corporation
5 * Authors: Tadeusz Struk <tadeusz.struk@intel.com>
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the Free
9 * Software Foundation; either version 2 of the License, or (at your option)
10 * any later version.
11 *
12 */
13#ifndef _RSA_HELPER_
14#define _RSA_HELPER_
Tudor Ambarus5a7de972016-06-14 16:14:58 +030015#include <linux/types.h>
Tadeusz Strukcfc2bb32015-06-16 10:31:01 -070016
Tudor Ambarus5a7de972016-06-14 16:14:58 +030017/**
18 * rsa_key - RSA key structure
19 * @n : RSA modulus raw byte stream
20 * @e : RSA public exponent raw byte stream
21 * @d : RSA private exponent raw byte stream
Salvatore Benedetto8be0b842016-07-04 17:21:38 +010022 * @p : RSA prime factor p of n raw byte stream
23 * @q : RSA prime factor q of n raw byte stream
24 * @dp : RSA exponent d mod (p - 1) raw byte stream
25 * @dq : RSA exponent d mod (q - 1) raw byte stream
26 * @qinv : RSA CRT coefficient q^(-1) mod p raw byte stream
Tudor Ambarus5a7de972016-06-14 16:14:58 +030027 * @n_sz : length in bytes of RSA modulus n
28 * @e_sz : length in bytes of RSA public exponent
29 * @d_sz : length in bytes of RSA private exponent
Salvatore Benedetto8be0b842016-07-04 17:21:38 +010030 * @p_sz : length in bytes of p field
31 * @q_sz : length in bytes of q field
32 * @dp_sz : length in bytes of dp field
33 * @dq_sz : length in bytes of dq field
34 * @qinv_sz : length in bytes of qinv field
Tudor Ambarus5a7de972016-06-14 16:14:58 +030035 */
Tadeusz Strukcfc2bb32015-06-16 10:31:01 -070036struct rsa_key {
Tudor Ambarus5a7de972016-06-14 16:14:58 +030037 const u8 *n;
38 const u8 *e;
39 const u8 *d;
Salvatore Benedetto8be0b842016-07-04 17:21:38 +010040 const u8 *p;
41 const u8 *q;
42 const u8 *dp;
43 const u8 *dq;
44 const u8 *qinv;
Tudor Ambarus5a7de972016-06-14 16:14:58 +030045 size_t n_sz;
46 size_t e_sz;
47 size_t d_sz;
Salvatore Benedetto8be0b842016-07-04 17:21:38 +010048 size_t p_sz;
49 size_t q_sz;
50 size_t dp_sz;
51 size_t dq_sz;
52 size_t qinv_sz;
Tadeusz Strukcfc2bb32015-06-16 10:31:01 -070053};
54
Tadeusz Struk22287b02015-10-08 09:26:55 -070055int rsa_parse_pub_key(struct rsa_key *rsa_key, const void *key,
56 unsigned int key_len);
57
58int rsa_parse_priv_key(struct rsa_key *rsa_key, const void *key,
59 unsigned int key_len);
Tadeusz Strukcfc2bb32015-06-16 10:31:01 -070060
Andrzej Zaborowski3d5b1ec2015-12-05 17:09:34 +010061extern struct crypto_template rsa_pkcs1pad_tmpl;
Tadeusz Strukcfc2bb32015-06-16 10:31:01 -070062#endif