aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/usb/hcd.h
Commit message (Expand)AuthorAge
* usb: Fix typo in the definition of Endpoint[out]RequestBenjamin Herrenschmidt2017-06-13
* usb: host: xhci-ring: don't need to clear interrupt pending for MSI enabled hcdPeter Chen2017-05-18
* usb: separate out sysdev pointer from usb_busArnd Bergmann2017-03-23
* usb: add CONFIG_USB_PCI for system have both PCI HW and non-PCI based USB HWyuan linyu2017-03-17
* usb: hcd.h: construct hub class request constants from simpler constantsTal Shorer2016-12-05
* usb: core: hub: hub_port_init lock controller instead of busChris Bainbridge2016-04-28
* usb: core: rename mutex usb_bus_list_lock to usb_bus_idr_lockHeiner Kallweit2016-02-07
* usb: core: switch bus numbering to using idrHeiner Kallweit2016-02-03
* USB: constify usb_mon_operations structureJulia Lawall2015-12-01
* usb: define HCD_USB31 speed option for hosts that support USB 3.1 featuresMathias Nyman2015-10-04
* usb: interface authorization: Use a flag for the default device authorizationStefan Koch2015-09-22
* usb: interface authorization: Introduces the default interface authorizationStefan Koch2015-09-22
* Revert "usb: interface authorization: Introduces the default interface author...Greg Kroah-Hartman2015-08-18
* Revert "usb: interface authorization: Use a flag for the default device autho...Greg Kroah-Hartman2015-08-18
* usb: interface authorization: Use a flag for the default device authorizationStefan Koch2015-08-14
* usb: interface authorization: Introduces the default interface authorizationStefan Koch2015-08-14
* usb: hcd.h: Fix the values of SetHubDepth and GetPortErrorCount to match USB ...Tal Shorer2015-08-08
* USB: hcd.h : Removed an unnecessary function prototype usb_find_interface_dri...Abhishek Bist2015-05-31
* USB: add flag for HCDs that can't receive wakeup requests (isp1760-hcd)Alan Stern2015-01-31
* usb: core: buffer: smallest buffer should start at ARCH_DMA_MINALIGNSebastian Andrzej Siewior2015-01-09
* Merge tag 'usb-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gre...Linus Torvalds2014-12-14
|\
| * usb: ehci: add ehci_port_power interfaceMichael Grzeschik2014-11-03
* | USB / PM: Drop CONFIG_PM_RUNTIME from the USB coreRafael J. Wysocki2014-12-03
|/
* usb: hcd: add generic PHY supportSergei Shtylyov2014-09-29
* usb: rename phy to usb_phy in HCDAntoine Tenart2014-09-29
* usb: hcd: add TPL support flagPeter Chen2014-09-24
* storage: accept some UAS devices if streams are unavailableOliver Neukum2014-03-04
* usb: xhci: change enumeration scheme to 'new scheme' by defaultDan Williams2013-12-10
* usb: hcd: Remove USB phy if neededValentine Barshak2013-12-08
* USB: add a private-data pointer to struct usb_ttAlan Stern2013-10-11
* USB: NS_TO_US should round upAlan Stern2013-10-11
* usb: core: implement AMD remote wakeup quirkHuang Rui2013-09-25
* USB: see if URB comes from a completion handlerAlan Stern2013-09-17
* USB: fix build error when CONFIG_PM_SLEEP isn't enabledAlan Stern2013-08-30
* USB: HCD: support giveback of URB in tasklet contextMing Lei2013-08-12
* Allow the USB HCD to create Wireless USB root hubsThomas Pugliese2013-06-03
* USB: remove CONFIG_USB_SUSPEND optionAlan Stern2013-03-28
* usb: add find_raw_port_number callback to struct hc_driver()Lan Tianyu2013-03-25
* USB: add usb_hcd_{start,end}_port_resumeAlan Stern2013-01-25
* usb: hcd: use *resource_size_t* for specifying resource dataKishon Vijay Abraham I2012-08-16
* Merge branch 'usb-linus' into usb-nextGreg Kroah-Hartman2012-06-13
|\
| * USB: add NO_D3_DURING_SLEEP flag and revert 151b61284776be2Alan Stern2012-06-13
* | USB: move transceiver from ehci_hcd and ohci_hcd to hcd and rename it as phyRichard Zhao2012-06-13
|/
* USB: Add support to enable/disable USB3 link states.Sarah Sharp2012-05-18
* Merge 3.4-rc6 into usb-nextGreg Kroah-Hartman2012-05-07
|\
| * USB: EHCI: fix crash during suspend on ASUS computersAlan Stern2012-04-24
* | USB: remove CONFIG_USB_DEVICEFSGreg Kroah-Hartman2012-04-29
|/
* usb: core: hcd: make hcd->irq unsignedFelipe Balbi2012-03-01
* USB/xHCI: Support device-initiated USB 3.0 resume.Sarah Sharp2012-02-14
* USB: Remove the SAW_IRQ hcd flagAlan Stern2011-11-14
gondor.apana.org.au> 2006-06-26 03:34:39 -0400 [CRYPTO] all: Pass tfm instead of ctx to algorithms' href='/cgit/cgit.cgi/litmus-rt-edfsc.git/commit/crypto/tea.c?id=6c2bb98bc33ae33c7a33a133a4cd5a06395fece5'>6c2bb98bc33a
06ace7a9bafe

1da177e4c3f4
06ace7a9bafe

1da177e4c3f4

fb4f10ed50f0
1da177e4c3f4
fb4f10ed50f0
1da177e4c3f4

06ace7a9bafe

1da177e4c3f4

6c2bb98bc33a

1da177e4c3f4
6c2bb98bc33a
06ace7a9bafe

1da177e4c3f4
06ace7a9bafe

1da177e4c3f4



fb4f10ed50f0




06ace7a9bafe

fb4f10ed50f0


6c2bb98bc33a

fb4f10ed50f0

6c2bb98bc33a
06ace7a9bafe

fb4f10ed50f0
06ace7a9bafe

fb4f10ed50f0






06ace7a9bafe

fb4f10ed50f0

6c2bb98bc33a

fb4f10ed50f0
6c2bb98bc33a
06ace7a9bafe

fb4f10ed50f0
06ace7a9bafe

fb4f10ed50f0



1da177e4c3f4




06ace7a9bafe

1da177e4c3f4






a429d2609c15
1da177e4c3f4














a429d2609c15
1da177e4c3f4









fb4f10ed50f0




a429d2609c15
fb4f10ed50f0









3af5b90bde50
1da177e4c3f4












fb4f10ed50f0






1da177e4c3f4



3af5b90bde50
1da177e4c3f4


fb4f10ed50f0
1da177e4c3f4


fb4f10ed50f0
1da177e4c3f4
3af5b90bde50

1da177e4c3f4

fb4f10ed50f0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309


                     
                                        



                                                                        



                                                                      











                                                                       
                          
                         
                        










                                          







                   
                                                               
                                           

                                                  
                                                   
 



                                          




                  

                                                                       

                             
                                                  

                                               
 

                               













                                                                   

                                

 

                                                                       

                           
                                                  

                                               
 

                               















                                                                   

                                

 
                                                                
                                            

                                                   
                                                   
 



                                          




                  

                                                                        

                                             
                                                   

                                               
 

                               

                              
                                                                        
                                  
                                                                             

         

                                

 

                                                                        
                      
                                                  

                                               
 

                               



                                       




                                                                             

                                


 

                                                                        

                                             
                                                   

                                               
 

                               






                                                                          

                                

 

                                                                        
                      
                                                  

                                               
 

                               



                                       




                                                                           

                                






                                                                
                                          














                                                                         
                                          









                                                                          




                                                                 
                                          









                                                                          
                                    












                                                






                                                 



                   
                                     


                                         
                                         


                     
                     
 

                          

                      
                                                                
/* 
 * Cryptographic API.
 *
 * TEA, XTEA, and XETA crypto alogrithms
 *
 * The TEA and Xtended TEA algorithms were developed by David Wheeler 
 * and Roger Needham at the Computer Laboratory of Cambridge University.
 *
 * Due to the order of evaluation in XTEA many people have incorrectly
 * implemented it.  XETA (XTEA in the wrong order), exists for
 * compatibility with these implementations.
 *
 * Copyright (c) 2004 Aaron Grothe ajgrothe@yahoo.com
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 */

#include <linux/init.h>
#include <linux/module.h>
#include <linux/mm.h>
#include <asm/byteorder.h>
#include <linux/crypto.h>
#include <linux/types.h>

#define TEA_KEY_SIZE		16
#define TEA_BLOCK_SIZE		8
#define TEA_ROUNDS		32
#define TEA_DELTA		0x9e3779b9

#define XTEA_KEY_SIZE		16
#define XTEA_BLOCK_SIZE		8
#define XTEA_ROUNDS		32
#define XTEA_DELTA		0x9e3779b9

struct tea_ctx {
	u32 KEY[4];
};

struct xtea_ctx {
	u32 KEY[4];
};

static int tea_setkey(struct crypto_tfm *tfm, const u8 *in_key,
		      unsigned int key_len)
{
	struct tea_ctx *ctx = crypto_tfm_ctx(tfm);
	const __le32 *key = (const __le32 *)in_key;

	ctx->KEY[0] = le32_to_cpu(key[0]);
	ctx->KEY[1] = le32_to_cpu(key[1]);
	ctx->KEY[2] = le32_to_cpu(key[2]);
	ctx->KEY[3] = le32_to_cpu(key[3]);

	return 0; 

}

static void tea_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
{
	u32 y, z, n, sum = 0;
	u32 k0, k1, k2, k3;
	struct tea_ctx *ctx = crypto_tfm_ctx(tfm);
	const __le32 *in = (const __le32 *)src;
	__le32 *out = (__le32 *)dst;

	y = le32_to_cpu(in[0]);
	z = le32_to_cpu(in[1]);

	k0 = ctx->KEY[0];
	k1 = ctx->KEY[1];
	k2 = ctx->KEY[2];
	k3 = ctx->KEY[3];

	n = TEA_ROUNDS;

	while (n-- > 0) {
		sum += TEA_DELTA;
		y += ((z << 4) + k0) ^ (z + sum) ^ ((z >> 5) + k1);
		z += ((y << 4) + k2) ^ (y + sum) ^ ((y >> 5) + k3);
	}
	
	out[0] = cpu_to_le32(y);
	out[1] = cpu_to_le32(z);
}

static void tea_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
{
	u32 y, z, n, sum;
	u32 k0, k1, k2, k3;
	struct tea_ctx *ctx = crypto_tfm_ctx(tfm);
	const __le32 *in = (const __le32 *)src;
	__le32 *out = (__le32 *)dst;

	y = le32_to_cpu(in[0]);
	z = le32_to_cpu(in[1]);

	k0 = ctx->KEY[0];
	k1 = ctx->KEY[1];
	k2 = ctx->KEY[2];
	k3 = ctx->KEY[3];

	sum = TEA_DELTA << 5;

	n = TEA_ROUNDS;

	while (n-- > 0) {
		z -= ((y << 4) + k2) ^ (y + sum) ^ ((y >> 5) + k3);
		y -= ((z << 4) + k0) ^ (z + sum) ^ ((z >> 5) + k1);
		sum -= TEA_DELTA;
	}
	
	out[0] = cpu_to_le32(y);
	out[1] = cpu_to_le32(z);
}

static int xtea_setkey(struct crypto_tfm *tfm, const u8 *in_key,
		       unsigned int key_len)
{
	struct xtea_ctx *ctx = crypto_tfm_ctx(tfm);
	const __le32 *key = (const __le32 *)in_key;

	ctx->KEY[0] = le32_to_cpu(key[0]);
	ctx->KEY[1] = le32_to_cpu(key[1]);
	ctx->KEY[2] = le32_to_cpu(key[2]);
	ctx->KEY[3] = le32_to_cpu(key[3]);

	return 0; 

}

static void xtea_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
{
	u32 y, z, sum = 0;
	u32 limit = XTEA_DELTA * XTEA_ROUNDS;
	struct xtea_ctx *ctx = crypto_tfm_ctx(tfm);
	const __le32 *in = (const __le32 *)src;
	__le32 *out = (__le32 *)dst;

	y = le32_to_cpu(in[0]);
	z = le32_to_cpu(in[1]);

	while (sum != limit) {
		y += ((z << 4 ^ z >> 5) + z) ^ (sum + ctx->KEY[sum&3]); 
		sum += XTEA_DELTA;
		z += ((y << 4 ^ y >> 5) + y) ^ (sum + ctx->KEY[sum>>11 &3]); 
	}
	
	out[0] = cpu_to_le32(y);
	out[1] = cpu_to_le32(z);
}

static void xtea_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
{
	u32 y, z, sum;
	struct tea_ctx *ctx = crypto_tfm_ctx(tfm);
	const __le32 *in = (const __le32 *)src;
	__le32 *out = (__le32 *)dst;

	y = le32_to_cpu(in[0]);
	z = le32_to_cpu(in[1]);

	sum = XTEA_DELTA * XTEA_ROUNDS;

	while (sum) {
		z -= ((y << 4 ^ y >> 5) + y) ^ (sum + ctx->KEY[sum>>11 & 3]);
		sum -= XTEA_DELTA;
		y -= ((z << 4 ^ z >> 5) + z) ^ (sum + ctx->KEY[sum & 3]);
	}
	
	out[0] = cpu_to_le32(y);
	out[1] = cpu_to_le32(z);
}


static void xeta_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
{
	u32 y, z, sum = 0;
	u32 limit = XTEA_DELTA * XTEA_ROUNDS;
	struct xtea_ctx *ctx = crypto_tfm_ctx(tfm);
	const __le32 *in = (const __le32 *)src;
	__le32 *out = (__le32 *)dst;

	y = le32_to_cpu(in[0]);
	z = le32_to_cpu(in[1]);

	while (sum != limit) {
		y += (z << 4 ^ z >> 5) + (z ^ sum) + ctx->KEY[sum&3];
		sum += XTEA_DELTA;
		z += (y << 4 ^ y >> 5) + (y ^ sum) + ctx->KEY[sum>>11 &3];
	}
	
	out[0] = cpu_to_le32(y);
	out[1] = cpu_to_le32(z);
}

static void xeta_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
{
	u32 y, z, sum;
	struct tea_ctx *ctx = crypto_tfm_ctx(tfm);
	const __le32 *in = (const __le32 *)src;
	__le32 *out = (__le32 *)dst;

	y = le32_to_cpu(in[0]);
	z = le32_to_cpu(in[1]);

	sum = XTEA_DELTA * XTEA_ROUNDS;

	while (sum) {
		z -= (y << 4 ^ y >> 5) + (y ^ sum) + ctx->KEY[sum>>11 & 3];
		sum -= XTEA_DELTA;
		y -= (z << 4 ^ z >> 5) + (z ^ sum) + ctx->KEY[sum & 3];
	}
	
	out[0] = cpu_to_le32(y);
	out[1] = cpu_to_le32(z);
}

static struct crypto_alg tea_alg = {
	.cra_name		=	"tea",
	.cra_flags		=	CRYPTO_ALG_TYPE_CIPHER,
	.cra_blocksize		=	TEA_BLOCK_SIZE,
	.cra_ctxsize		=	sizeof (struct tea_ctx),
	.cra_alignmask		=	3,
	.cra_module		=	THIS_MODULE,
	.cra_list		=	LIST_HEAD_INIT(tea_alg.cra_list),
	.cra_u			=	{ .cipher = {
	.cia_min_keysize	=	TEA_KEY_SIZE,
	.cia_max_keysize	=	TEA_KEY_SIZE,
	.cia_setkey		= 	tea_setkey,
	.cia_encrypt		=	tea_encrypt,
	.cia_decrypt		=	tea_decrypt } }
};

static struct crypto_alg xtea_alg = {
	.cra_name		=	"xtea",
	.cra_flags		=	CRYPTO_ALG_TYPE_CIPHER,
	.cra_blocksize		=	XTEA_BLOCK_SIZE,
	.cra_ctxsize		=	sizeof (struct xtea_ctx),
	.cra_alignmask		=	3,
	.cra_module		=	THIS_MODULE,
	.cra_list		=	LIST_HEAD_INIT(xtea_alg.cra_list),
	.cra_u			=	{ .cipher = {
	.cia_min_keysize	=	XTEA_KEY_SIZE,
	.cia_max_keysize	=	XTEA_KEY_SIZE,
	.cia_setkey		= 	xtea_setkey,
	.cia_encrypt		=	xtea_encrypt,
	.cia_decrypt		=	xtea_decrypt } }
};

static struct crypto_alg xeta_alg = {
	.cra_name		=	"xeta",
	.cra_flags		=	CRYPTO_ALG_TYPE_CIPHER,
	.cra_blocksize		=	XTEA_BLOCK_SIZE,
	.cra_ctxsize		=	sizeof (struct xtea_ctx),
	.cra_alignmask		=	3,
	.cra_module		=	THIS_MODULE,
	.cra_list		=	LIST_HEAD_INIT(xtea_alg.cra_list),
	.cra_u			=	{ .cipher = {
	.cia_min_keysize	=	XTEA_KEY_SIZE,
	.cia_max_keysize	=	XTEA_KEY_SIZE,
	.cia_setkey		= 	xtea_setkey,
	.cia_encrypt		=	xeta_encrypt,
	.cia_decrypt		=	xeta_decrypt } }
};

static int __init tea_mod_init(void)
{
	int ret = 0;
	
	ret = crypto_register_alg(&tea_alg);
	if (ret < 0)
		goto out;

	ret = crypto_register_alg(&xtea_alg);
	if (ret < 0) {
		crypto_unregister_alg(&tea_alg);
		goto out;
	}

	ret = crypto_register_alg(&xeta_alg);
	if (ret < 0) {
		crypto_unregister_alg(&tea_alg);
		crypto_unregister_alg(&xtea_alg);
		goto out;
	}

out:	
	return ret;
}

static void __exit tea_mod_fini(void)
{
	crypto_unregister_alg(&tea_alg);
	crypto_unregister_alg(&xtea_alg);
	crypto_unregister_alg(&xeta_alg);
}

MODULE_ALIAS("xtea");
MODULE_ALIAS("xeta");

module_init(tea_mod_init);
module_exit(tea_mod_fini);

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("TEA, XTEA & XETA Cryptographic Algorithms");