xref: /rk3399_rockchip-uboot/cmd/crypto.c (revision 80ca1a53ebaa3f19a076ff07766297083ba826c7)
1cc6ac5d6SJoseph Chen // SPDX-License-Identifier: GPL-2.0
2cc6ac5d6SJoseph Chen /*
3cc6ac5d6SJoseph Chen  * Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd
4cc6ac5d6SJoseph Chen  */
5cc6ac5d6SJoseph Chen 
6cc6ac5d6SJoseph Chen #include <common.h>
7cc6ac5d6SJoseph Chen #include <command.h>
8cc6ac5d6SJoseph Chen #include <crypto.h>
9cc6ac5d6SJoseph Chen #include <dm.h>
10cc6ac5d6SJoseph Chen #include <u-boot/md5.h>
11cc6ac5d6SJoseph Chen #include <u-boot/sha1.h>
12cc6ac5d6SJoseph Chen #include <u-boot/sha256.h>
13e7b6c6a9SLin Jinhan #include <u-boot/sha512.h>
14cc6ac5d6SJoseph Chen 
15*80ca1a53SLin Jinhan #define HASH_PERF_EVAL(dev, algo)	hash_perf_eval(dev, algo, #algo)
16*80ca1a53SLin Jinhan 
1727d36fbdSJoseph Chen __cacheline_aligned static u8 foo_data[] = {
18cc6ac5d6SJoseph Chen 	0x52, 0x53, 0x41, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
19cc6ac5d6SJoseph Chen 	0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
20cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd5, 0xf2, 0xfc, 0xbb,
21cc6ac5d6SJoseph Chen 	0x1a, 0x39, 0x61, 0xf5, 0x63, 0x7f, 0xa6, 0xeb, 0x5d, 0xc5, 0x22, 0xe2,
22cc6ac5d6SJoseph Chen 	0x65, 0x03, 0xcc, 0x61, 0x92, 0x60, 0x4c, 0x5f, 0x4e, 0x81, 0x96, 0x3d,
23cc6ac5d6SJoseph Chen 	0x89, 0x1d, 0xa3, 0x5c, 0xb7, 0x88, 0xc3, 0x75, 0xcd, 0x71, 0xf0, 0x16,
24cc6ac5d6SJoseph Chen 	0x04, 0x5e, 0xef, 0x85, 0xdf, 0x30, 0x57, 0x7e, 0x06, 0x0d, 0x44, 0x3b,
25cc6ac5d6SJoseph Chen 	0x80, 0x22, 0x41, 0xcd, 0xba, 0x40, 0xb5, 0xfa, 0xbe, 0x8f, 0xa9, 0x61,
26cc6ac5d6SJoseph Chen 	0x4d, 0xc6, 0x2a, 0xd9, 0x96, 0x57, 0x57, 0xc6, 0xc0, 0x99, 0xc0, 0x94,
27cc6ac5d6SJoseph Chen 	0x57, 0x21, 0x0a, 0xad, 0xde, 0x4c, 0xe1, 0xaa, 0x6e, 0x11, 0xc6, 0xeb,
28cc6ac5d6SJoseph Chen 	0xa2, 0x09, 0x65, 0xd9, 0xd5, 0xc6, 0x8f, 0x8d, 0xb6, 0xec, 0xb3, 0xca,
29cc6ac5d6SJoseph Chen 	0x29, 0xa4, 0x9f, 0xab, 0x90, 0x7e, 0xf2, 0x86, 0x92, 0x25, 0x71, 0xf4,
30cc6ac5d6SJoseph Chen 	0x17, 0x70, 0x92, 0xe0, 0xd0, 0xe2, 0xe1, 0x57, 0xc4, 0xca, 0x44, 0xbb,
31cc6ac5d6SJoseph Chen 	0x14, 0xdc, 0xf8, 0x1a, 0x27, 0x00, 0x8f, 0x30, 0xcd, 0x0a, 0x4a, 0x26,
32cc6ac5d6SJoseph Chen 	0x42, 0x07, 0xa1, 0x1e, 0x69, 0x7e, 0xfd, 0xc4, 0x38, 0xf8, 0x53, 0xfe,
33cc6ac5d6SJoseph Chen 	0xcd, 0xa7, 0xfc, 0x7d, 0xa1, 0x87, 0xe8, 0xec, 0x52, 0x01, 0x37, 0x43,
34cc6ac5d6SJoseph Chen 	0x0c, 0xf2, 0x2e, 0x89, 0x3d, 0xaa, 0xed, 0x9d, 0x83, 0x13, 0x8f, 0x79,
35cc6ac5d6SJoseph Chen 	0xec, 0xb3, 0x7f, 0xbe, 0xf9, 0x36, 0x99, 0x8d, 0x93, 0xc2, 0x4d, 0x8f,
36cc6ac5d6SJoseph Chen 	0x8f, 0x18, 0x1e, 0x94, 0x25, 0xe7, 0x0b, 0xdc, 0xd9, 0x85, 0x88, 0x77,
37cc6ac5d6SJoseph Chen 	0x7e, 0x25, 0x80, 0x10, 0xde, 0xb6, 0xdd, 0xe6, 0xb6, 0xba, 0xe9, 0x1d,
38cc6ac5d6SJoseph Chen 	0xac, 0xd2, 0xd7, 0x1c, 0x8e, 0x86, 0x5e, 0xd1, 0xc0, 0x97, 0x59, 0x79,
39cc6ac5d6SJoseph Chen 	0x7e, 0x1a, 0x96, 0x6a, 0xa1, 0x09, 0xc0, 0x45, 0xb0, 0x71, 0x2d, 0xd1,
40cc6ac5d6SJoseph Chen 	0x87, 0x6f, 0xbe, 0x31, 0x21, 0xcb, 0x52, 0xde, 0x48, 0x41, 0x73, 0x7e,
41cc6ac5d6SJoseph Chen 	0x4a, 0x2f, 0xf8, 0x95, 0x0c, 0x2d, 0xb4, 0x9d, 0x53, 0x70, 0xcd, 0xa5,
42cc6ac5d6SJoseph Chen 	0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
43cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
44cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
45cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
46cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
47cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
48cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
49cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
50cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
51cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
52cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
53cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
54cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
55cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
56cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
57cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
60cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
61cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
62cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
63cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0xa5, 0x0d, 0xc2, 0xc6, 0xf1, 0x08, 0x95, 0x55,
64cc6ac5d6SJoseph Chen 	0x1d, 0xb3, 0xf9, 0x43, 0xb0, 0x7b, 0x5b, 0x96, 0xa0, 0x72, 0xe8, 0xd6,
65cc6ac5d6SJoseph Chen 	0x95, 0xd6, 0x98, 0xec, 0x53, 0x6b, 0x85, 0x77, 0x74, 0x21, 0xf1, 0x22,
66cc6ac5d6SJoseph Chen 	0x5c, 0x4d, 0x56, 0x55, 0x89, 0x0d, 0x60, 0xa5, 0x2b, 0x68, 0xf8, 0x71,
67cc6ac5d6SJoseph Chen 	0x6d, 0x72, 0xed, 0x67, 0x55, 0x3e, 0x5f, 0xd1, 0x9e, 0x21, 0xa7, 0x6e,
68cc6ac5d6SJoseph Chen 	0x5c, 0xf2, 0xac, 0xe8, 0x66, 0x1d, 0x4e, 0xe5, 0x58, 0x76, 0xed, 0x2b,
69cc6ac5d6SJoseph Chen 	0xfe, 0x2b, 0xc9, 0xf6, 0x7f, 0xb7, 0x02, 0x27, 0xfd, 0x25, 0x3f, 0x2d,
70cc6ac5d6SJoseph Chen 	0x7c, 0x1c, 0x37, 0x80, 0x29, 0x7f, 0x12, 0xd2, 0xd5, 0xae, 0x27, 0xc6,
71cc6ac5d6SJoseph Chen 	0x68, 0x24, 0x83, 0xc5, 0x61, 0x8b, 0xea, 0x1a, 0xbd, 0x07, 0x96, 0xe4,
72cc6ac5d6SJoseph Chen 	0xd1, 0xc5, 0xd4, 0x21, 0x39, 0x4a, 0xaa, 0x66, 0xd2, 0x3f, 0xd2, 0x67,
73cc6ac5d6SJoseph Chen 	0x55, 0x39, 0xbf, 0x40, 0x66, 0x66, 0x5a, 0x92, 0xdd, 0x8d, 0xda, 0x5a,
74cc6ac5d6SJoseph Chen 	0x89, 0x7e, 0x78, 0xd9, 0x5f, 0x42, 0xe4, 0x16, 0xdb, 0x76, 0x49, 0xe0,
75cc6ac5d6SJoseph Chen 	0x71, 0x98, 0x8e, 0xed, 0x61, 0xd9, 0x63, 0x0a, 0x11, 0xf6, 0x24, 0x7f,
76cc6ac5d6SJoseph Chen 	0x9b, 0xf2, 0xee, 0xfc, 0xa4, 0x4c, 0x98, 0x81, 0xfb, 0x2d, 0xd3, 0x8f,
77cc6ac5d6SJoseph Chen 	0x29, 0x77, 0x63, 0xd9, 0x51, 0xfc, 0xe1, 0x17, 0x3f, 0xc3, 0xce, 0xca,
78cc6ac5d6SJoseph Chen 	0xbe, 0xec, 0xf2, 0xc9, 0x07, 0x48, 0x74, 0x54, 0xbb, 0x1d, 0x02, 0xe7,
79cc6ac5d6SJoseph Chen 	0xaf, 0x18, 0x27, 0x39, 0xb8, 0xc4, 0x90, 0x05, 0x20, 0x5b, 0x38, 0x7b,
80cc6ac5d6SJoseph Chen 	0x3a, 0x15, 0x94, 0x7e, 0xe8, 0xc1, 0xa5, 0x8c, 0xc0, 0x6c, 0x86, 0x96,
81cc6ac5d6SJoseph Chen 	0xeb, 0x46, 0xfa, 0xad, 0x2e, 0x69, 0x12, 0x56, 0xb9, 0x51, 0x91, 0x9c,
82cc6ac5d6SJoseph Chen 	0xea, 0x83, 0x4b, 0xd3, 0x5f, 0xb7, 0xdd, 0x29, 0x99, 0xb9, 0x66, 0x65,
83cc6ac5d6SJoseph Chen 	0x5e, 0xe2, 0x59, 0x16, 0x20, 0xa2, 0xda, 0x0e, 0x8e, 0xd4, 0x41, 0xdc,
84cc6ac5d6SJoseph Chen 	0x1e, 0x75, 0x32, 0xf8, 0x73, 0xfa, 0x22, 0x7b, 0x22, 0x7c, 0x7d, 0x9d,
85cc6ac5d6SJoseph Chen 	0x03, 0x89, 0x54, 0x27, 0x8f, 0xbb, 0x12, 0xbb, 0x29, 0x0a, 0xe0, 0x41,
86cc6ac5d6SJoseph Chen 	0x4e, 0x80, 0x1b, 0x3f, 0x9c, 0x6d, 0xc1, 0x79, 0xdb, 0x3c, 0xc4, 0xd2,
87cc6ac5d6SJoseph Chen 	0x65, 0x99, 0xd7, 0x16, 0xff, 0xff, 0xff, 0xff, 0xd1, 0x95, 0x46, 0x66,
88cc6ac5d6SJoseph Chen 	0x83, 0xe2, 0x1b, 0xd4, 0x35, 0x1f, 0x5d, 0xf2, 0x1e, 0xb5, 0x43, 0x22,
89cc6ac5d6SJoseph Chen 	0xe4, 0x41, 0xe6, 0x6a, 0x46, 0x93, 0x24, 0x89, 0x1b, 0x74, 0x3c, 0xa0,
90cc6ac5d6SJoseph Chen 	0x20, 0x3b, 0x4e, 0x64, 0xff, 0xff, 0xff, 0xff,
91cc6ac5d6SJoseph Chen };
92cc6ac5d6SJoseph Chen 
93cc6ac5d6SJoseph Chen static u8 rsa2048_n[] = {
94cc6ac5d6SJoseph Chen 	0xd5, 0xf2, 0xfc, 0xbb, 0x1a, 0x39, 0x61, 0xf5, 0x63, 0x7f, 0xa6, 0xeb,
95cc6ac5d6SJoseph Chen 	0x5d, 0xc5, 0x22, 0xe2, 0x65, 0x03, 0xcc, 0x61, 0x92, 0x60, 0x4c, 0x5f,
96cc6ac5d6SJoseph Chen 	0x4e, 0x81, 0x96, 0x3d, 0x89, 0x1d, 0xa3, 0x5c, 0xb7, 0x88, 0xc3, 0x75,
97cc6ac5d6SJoseph Chen 	0xcd, 0x71, 0xf0, 0x16, 0x04, 0x5e, 0xef, 0x85, 0xdf, 0x30, 0x57, 0x7e,
98cc6ac5d6SJoseph Chen 	0x06, 0x0d, 0x44, 0x3b, 0x80, 0x22, 0x41, 0xcd, 0xba, 0x40, 0xb5, 0xfa,
99cc6ac5d6SJoseph Chen 	0xbe, 0x8f, 0xa9, 0x61, 0x4d, 0xc6, 0x2a, 0xd9, 0x96, 0x57, 0x57, 0xc6,
100cc6ac5d6SJoseph Chen 	0xc0, 0x99, 0xc0, 0x94, 0x57, 0x21, 0x0a, 0xad, 0xde, 0x4c, 0xe1, 0xaa,
101cc6ac5d6SJoseph Chen 	0x6e, 0x11, 0xc6, 0xeb, 0xa2, 0x09, 0x65, 0xd9, 0xd5, 0xc6, 0x8f, 0x8d,
102cc6ac5d6SJoseph Chen 	0xb6, 0xec, 0xb3, 0xca, 0x29, 0xa4, 0x9f, 0xab, 0x90, 0x7e, 0xf2, 0x86,
103cc6ac5d6SJoseph Chen 	0x92, 0x25, 0x71, 0xf4, 0x17, 0x70, 0x92, 0xe0, 0xd0, 0xe2, 0xe1, 0x57,
104cc6ac5d6SJoseph Chen 	0xc4, 0xca, 0x44, 0xbb, 0x14, 0xdc, 0xf8, 0x1a, 0x27, 0x00, 0x8f, 0x30,
105cc6ac5d6SJoseph Chen 	0xcd, 0x0a, 0x4a, 0x26, 0x42, 0x07, 0xa1, 0x1e, 0x69, 0x7e, 0xfd, 0xc4,
106cc6ac5d6SJoseph Chen 	0x38, 0xf8, 0x53, 0xfe, 0xcd, 0xa7, 0xfc, 0x7d, 0xa1, 0x87, 0xe8, 0xec,
107cc6ac5d6SJoseph Chen 	0x52, 0x01, 0x37, 0x43, 0x0c, 0xf2, 0x2e, 0x89, 0x3d, 0xaa, 0xed, 0x9d,
108cc6ac5d6SJoseph Chen 	0x83, 0x13, 0x8f, 0x79, 0xec, 0xb3, 0x7f, 0xbe, 0xf9, 0x36, 0x99, 0x8d,
109cc6ac5d6SJoseph Chen 	0x93, 0xc2, 0x4d, 0x8f, 0x8f, 0x18, 0x1e, 0x94, 0x25, 0xe7, 0x0b, 0xdc,
110cc6ac5d6SJoseph Chen 	0xd9, 0x85, 0x88, 0x77, 0x7e, 0x25, 0x80, 0x10, 0xde, 0xb6, 0xdd, 0xe6,
111cc6ac5d6SJoseph Chen 	0xb6, 0xba, 0xe9, 0x1d, 0xac, 0xd2, 0xd7, 0x1c, 0x8e, 0x86, 0x5e, 0xd1,
112cc6ac5d6SJoseph Chen 	0xc0, 0x97, 0x59, 0x79, 0x7e, 0x1a, 0x96, 0x6a, 0xa1, 0x09, 0xc0, 0x45,
113cc6ac5d6SJoseph Chen 	0xb0, 0x71, 0x2d, 0xd1, 0x87, 0x6f, 0xbe, 0x31, 0x21, 0xcb, 0x52, 0xde,
114cc6ac5d6SJoseph Chen 	0x48, 0x41, 0x73, 0x7e, 0x4a, 0x2f, 0xf8, 0x95, 0x0c, 0x2d, 0xb4, 0x9d,
115cc6ac5d6SJoseph Chen 	0x53, 0x70, 0xcd, 0xa5,
116cc6ac5d6SJoseph Chen };
117cc6ac5d6SJoseph Chen 
118cc6ac5d6SJoseph Chen static u8 rsa2048_e[] = {
119cc6ac5d6SJoseph Chen 	0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
120cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
121cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
122cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
123cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
124cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
125cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
126cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
127cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
128cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
129cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
130cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
131cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
132cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
133cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
134cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
136cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
137cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
138cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
139cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
140cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00,
141cc6ac5d6SJoseph Chen };
142cc6ac5d6SJoseph Chen 
1435d8287bfSLin Jinhan #ifdef CONFIG_ROCKCHIP_CRYPTO_V1
144cc6ac5d6SJoseph Chen static u8 rsa2048_c[] = {
145cc6ac5d6SJoseph Chen 	0xa5, 0x0d, 0xc2, 0xc6, 0xf1, 0x08, 0x95, 0x55, 0x1d, 0xb3, 0xf9, 0x43,
146cc6ac5d6SJoseph Chen 	0xb0, 0x7b, 0x5b, 0x96, 0xa0, 0x72, 0xe8, 0xd6, 0x95, 0xd6, 0x98, 0xec,
147cc6ac5d6SJoseph Chen 	0x53, 0x6b, 0x85, 0x77, 0x74, 0x21, 0xf1, 0x22, 0x5c, 0x4d, 0x56, 0x55,
148cc6ac5d6SJoseph Chen 	0x89, 0x0d, 0x60, 0xa5, 0x2b, 0x68, 0xf8, 0x71, 0x6d, 0x72, 0xed, 0x67,
149cc6ac5d6SJoseph Chen 	0x55, 0x3e, 0x5f, 0xd1, 0x9e, 0x21, 0xa7, 0x6e, 0x5c, 0xf2, 0xac, 0xe8,
150cc6ac5d6SJoseph Chen 	0x66, 0x1d, 0x4e, 0xe5, 0x58, 0x76, 0xed, 0x2b, 0xfe, 0x2b, 0xc9, 0xf6,
151cc6ac5d6SJoseph Chen 	0x7f, 0xb7, 0x02, 0x27, 0xfd, 0x25, 0x3f, 0x2d, 0x7c, 0x1c, 0x37, 0x80,
152cc6ac5d6SJoseph Chen 	0x29, 0x7f, 0x12, 0xd2, 0xd5, 0xae, 0x27, 0xc6, 0x68, 0x24, 0x83, 0xc5,
153cc6ac5d6SJoseph Chen 	0x61, 0x8b, 0xea, 0x1a, 0xbd, 0x07, 0x96, 0xe4, 0xd1, 0xc5, 0xd4, 0x21,
154cc6ac5d6SJoseph Chen 	0x39, 0x4a, 0xaa, 0x66, 0xd2, 0x3f, 0xd2, 0x67, 0x55, 0x39, 0xbf, 0x40,
155cc6ac5d6SJoseph Chen 	0x66, 0x66, 0x5a, 0x92, 0xdd, 0x8d, 0xda, 0x5a, 0x89, 0x7e, 0x78, 0xd9,
156cc6ac5d6SJoseph Chen 	0x5f, 0x42, 0xe4, 0x16, 0xdb, 0x76, 0x49, 0xe0, 0x71, 0x98, 0x8e, 0xed,
157cc6ac5d6SJoseph Chen 	0x61, 0xd9, 0x63, 0x0a, 0x11, 0xf6, 0x24, 0x7f, 0x9b, 0xf2, 0xee, 0xfc,
158cc6ac5d6SJoseph Chen 	0xa4, 0x4c, 0x98, 0x81, 0xfb, 0x2d, 0xd3, 0x8f, 0x29, 0x77, 0x63, 0xd9,
159cc6ac5d6SJoseph Chen 	0x51, 0xfc, 0xe1, 0x17, 0x3f, 0xc3, 0xce, 0xca, 0xbe, 0xec, 0xf2, 0xc9,
160cc6ac5d6SJoseph Chen 	0x07, 0x48, 0x74, 0x54, 0xbb, 0x1d, 0x02, 0xe7, 0xaf, 0x18, 0x27, 0x39,
161cc6ac5d6SJoseph Chen 	0xb8, 0xc4, 0x90, 0x05, 0x20, 0x5b, 0x38, 0x7b, 0x3a, 0x15, 0x94, 0x7e,
162cc6ac5d6SJoseph Chen 	0xe8, 0xc1, 0xa5, 0x8c, 0xc0, 0x6c, 0x86, 0x96, 0xeb, 0x46, 0xfa, 0xad,
163cc6ac5d6SJoseph Chen 	0x2e, 0x69, 0x12, 0x56, 0xb9, 0x51, 0x91, 0x9c, 0xea, 0x83, 0x4b, 0xd3,
164cc6ac5d6SJoseph Chen 	0x5f, 0xb7, 0xdd, 0x29, 0x99, 0xb9, 0x66, 0x65, 0x5e, 0xe2, 0x59, 0x16,
165cc6ac5d6SJoseph Chen 	0x20, 0xa2, 0xda, 0x0e, 0x8e, 0xd4, 0x41, 0xdc, 0x1e, 0x75, 0x32, 0xf8,
166cc6ac5d6SJoseph Chen 	0x73, 0xfa, 0x22, 0x7b,
167cc6ac5d6SJoseph Chen };
1685d8287bfSLin Jinhan #endif
169cc6ac5d6SJoseph Chen 
170cc6ac5d6SJoseph Chen /* RSA2048-SHA256 sign data of foo_data[] */
171cc6ac5d6SJoseph Chen static u8 rsa2048_sha256_sign[] = {
172cc6ac5d6SJoseph Chen 	0xd4, 0x05, 0x21, 0x34, 0x2c, 0x92, 0xaf, 0x73, 0x72, 0x13, 0x54, 0x92,
173cc6ac5d6SJoseph Chen 	0x9b, 0x57, 0x63, 0x82, 0xd4, 0x7c, 0x41, 0xba, 0x58, 0x3e, 0xa6, 0x82,
174cc6ac5d6SJoseph Chen 	0xe8, 0x56, 0x9f, 0x1c, 0xc2, 0x6d, 0x07, 0x6d, 0xe0, 0xca, 0x4c, 0x93,
175cc6ac5d6SJoseph Chen 	0xb4, 0xa4, 0x82, 0x53, 0x41, 0x58, 0xeb, 0x77, 0xd5, 0x2c, 0xf5, 0x3f,
176cc6ac5d6SJoseph Chen 	0x3d, 0x1b, 0x54, 0x1b, 0x6a, 0x18, 0x30, 0xc1, 0x93, 0x14, 0x8f, 0xdd,
177cc6ac5d6SJoseph Chen 	0x77, 0xe4, 0xed, 0xb8, 0xd3, 0xfc, 0x63, 0xed, 0x88, 0x2f, 0xf4, 0x35,
178cc6ac5d6SJoseph Chen 	0xc4, 0xdb, 0x89, 0x94, 0x4a, 0xcd, 0x88, 0x88, 0x4f, 0xc3, 0xeb, 0x14,
179cc6ac5d6SJoseph Chen 	0x03, 0xd9, 0x85, 0x2e, 0x7a, 0x27, 0xbd, 0xc9, 0x19, 0xbf, 0x55, 0x50,
180cc6ac5d6SJoseph Chen 	0x2a, 0x29, 0x23, 0x02, 0xe4, 0xaf, 0x16, 0x5c, 0x17, 0x81, 0x38, 0x79,
181cc6ac5d6SJoseph Chen 	0xf1, 0x2b, 0x9a, 0xc7, 0xd2, 0x9d, 0x66, 0xca, 0xf7, 0x6b, 0xf0, 0x83,
182cc6ac5d6SJoseph Chen 	0x81, 0x57, 0xfc, 0x56, 0xae, 0x6d, 0x98, 0xae, 0xe2, 0xec, 0x00, 0x19,
183cc6ac5d6SJoseph Chen 	0x6b, 0x75, 0x06, 0xdc, 0x1c, 0x6e, 0xbd, 0x23, 0x15, 0xb1, 0x3a, 0x43,
184cc6ac5d6SJoseph Chen 	0x7e, 0x3c, 0x8b, 0x32, 0x9c, 0x4d, 0xa2, 0xcf, 0x14, 0xee, 0xd8, 0x7a,
185cc6ac5d6SJoseph Chen 	0x12, 0x90, 0x70, 0xd2, 0x9f, 0xd5, 0x6d, 0x50, 0x67, 0x35, 0x93, 0x97,
186cc6ac5d6SJoseph Chen 	0x2e, 0xff, 0x8f, 0xbf, 0x34, 0x4c, 0xa9, 0xee, 0x6a, 0xaa, 0x87, 0x09,
187cc6ac5d6SJoseph Chen 	0x1f, 0x6b, 0xcc, 0x3d, 0xeb, 0x88, 0xca, 0x8f, 0x45, 0x86, 0xb7, 0xb2,
188cc6ac5d6SJoseph Chen 	0xd6, 0xd8, 0xe5, 0x3e, 0x94, 0x02, 0x4b, 0xa7, 0x74, 0xb8, 0x5f, 0x1f,
189cc6ac5d6SJoseph Chen 	0xe3, 0xbc, 0x95, 0x72, 0x3b, 0x51, 0xd4, 0xec, 0x8d, 0x87, 0xca, 0xb0,
190cc6ac5d6SJoseph Chen 	0x69, 0xca, 0xa9, 0x68, 0xfc, 0x34, 0xf9, 0xb5, 0x67, 0xef, 0xac, 0xc2,
191cc6ac5d6SJoseph Chen 	0x10, 0x1a, 0x39, 0x56, 0xcb, 0x38, 0x45, 0x92, 0x74, 0x2e, 0x24, 0x1c,
192cc6ac5d6SJoseph Chen 	0x4e, 0x31, 0x80, 0xd9, 0x2d, 0x5f, 0x74, 0x48, 0xfe, 0x46, 0x4e, 0xf6,
193cc6ac5d6SJoseph Chen 	0x19, 0x9a, 0x1d, 0x32,
194cc6ac5d6SJoseph Chen };
195cc6ac5d6SJoseph Chen 
196c9d107b5SLin Jinhan static void dump_hash(const char *title, void *hard_d, void *soft_d, u32 nbits)
197cc6ac5d6SJoseph Chen {
198cc6ac5d6SJoseph Chen 	int i, same;
199cc6ac5d6SJoseph Chen 	char *buf;
200cc6ac5d6SJoseph Chen 
201cc6ac5d6SJoseph Chen 	same = !memcmp(hard_d, soft_d, BITS2BYTE(nbits));
202cc6ac5d6SJoseph Chen 	printf("[%s]: %s\n", title, same ? "OK" : "FAIL");
203cc6ac5d6SJoseph Chen 
204cc6ac5d6SJoseph Chen 	printf("    hard: ");
205cc6ac5d6SJoseph Chen 	buf = hard_d;
206cc6ac5d6SJoseph Chen 	for (i = 0; i < BITS2BYTE(nbits); i++)
207cc6ac5d6SJoseph Chen 		printf("%02x ", buf[i]);
208cc6ac5d6SJoseph Chen 
209cc6ac5d6SJoseph Chen 	printf("\n    soft: ");
210cc6ac5d6SJoseph Chen 	buf = soft_d;
211cc6ac5d6SJoseph Chen 	for (i = 0; i < BITS2BYTE(nbits); i++)
212cc6ac5d6SJoseph Chen 		printf("%02x ", buf[i]);
213cc6ac5d6SJoseph Chen 
214cc6ac5d6SJoseph Chen 	printf("\n\n");
215cc6ac5d6SJoseph Chen }
216cc6ac5d6SJoseph Chen 
217c9d107b5SLin Jinhan static void dump_hex(const char *name, const u8 *array, u32 len)
218c9d107b5SLin Jinhan {
219c9d107b5SLin Jinhan 	int i;
220c9d107b5SLin Jinhan 
221c9d107b5SLin Jinhan 	printf("[%s]: %uByte", name, len);
222c9d107b5SLin Jinhan 	for (i = 0; i < len; i++) {
223c9d107b5SLin Jinhan 		if (i % 32 == 0)
224c9d107b5SLin Jinhan 			printf("\n");
225c9d107b5SLin Jinhan 		printf("%02x ", array[i]);
226c9d107b5SLin Jinhan 	}
227c9d107b5SLin Jinhan 	printf("\n");
228c9d107b5SLin Jinhan }
229c9d107b5SLin Jinhan 
230*80ca1a53SLin Jinhan static int hash_perf_eval(struct udevice *dev, u32 algo, char *algo_name)
231*80ca1a53SLin Jinhan {
232*80ca1a53SLin Jinhan 	sha_context ctx;
233*80ca1a53SLin Jinhan 	u32 data_size = 8 * 1024;
234*80ca1a53SLin Jinhan 	u8 *data = NULL;
235*80ca1a53SLin Jinhan 	u8 hash_out[64];
236*80ca1a53SLin Jinhan 	int ret;
237*80ca1a53SLin Jinhan 
238*80ca1a53SLin Jinhan 	ctx.algo = algo;
239*80ca1a53SLin Jinhan 	ctx.length = 100 * 1024 * 1024;
240*80ca1a53SLin Jinhan 
241*80ca1a53SLin Jinhan 	data = (u8 *)memalign(CONFIG_SYS_CACHELINE_SIZE, data_size);
242*80ca1a53SLin Jinhan 	if (!data) {
243*80ca1a53SLin Jinhan 		printf("%s, %d: memalign %u error!\n",
244*80ca1a53SLin Jinhan 		       __func__, __LINE__, data_size);
245*80ca1a53SLin Jinhan 		return -EINVAL;
246*80ca1a53SLin Jinhan 	}
247*80ca1a53SLin Jinhan 
248*80ca1a53SLin Jinhan 	memset(data, 0xab, data_size);
249*80ca1a53SLin Jinhan 
250*80ca1a53SLin Jinhan 	ulong start = get_timer(0);
251*80ca1a53SLin Jinhan 
252*80ca1a53SLin Jinhan 	ret = crypto_sha_init(dev, &ctx);
253*80ca1a53SLin Jinhan 	if (ret)
254*80ca1a53SLin Jinhan 		goto exit;
255*80ca1a53SLin Jinhan 
256*80ca1a53SLin Jinhan 	for (u32 i = 0; i < ctx.length / data_size; i++) {
257*80ca1a53SLin Jinhan 		ret = crypto_sha_update(dev, (u32 *)data, data_size);
258*80ca1a53SLin Jinhan 		if (ret)
259*80ca1a53SLin Jinhan 			goto exit;
260*80ca1a53SLin Jinhan 	}
261*80ca1a53SLin Jinhan 
262*80ca1a53SLin Jinhan 	ret = crypto_sha_final(dev, &ctx, hash_out);
263*80ca1a53SLin Jinhan 
264*80ca1a53SLin Jinhan 	ulong time_cost = get_timer(start);
265*80ca1a53SLin Jinhan 
266*80ca1a53SLin Jinhan 	printf("%s, hash performance = %luMBps\n",
267*80ca1a53SLin Jinhan 	       algo_name, (100 * 1000) / time_cost);
268*80ca1a53SLin Jinhan exit:
269*80ca1a53SLin Jinhan 	free(data);
270*80ca1a53SLin Jinhan 
271*80ca1a53SLin Jinhan 	return ret;
272*80ca1a53SLin Jinhan }
273*80ca1a53SLin Jinhan 
274cc6ac5d6SJoseph Chen static int do_crypto(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
275cc6ac5d6SJoseph Chen {
276cc6ac5d6SJoseph Chen 	struct udevice *dev;
277cc6ac5d6SJoseph Chen 	sha_context csha_ctx;
278cc6ac5d6SJoseph Chen 	sha1_context sha1_ctx;
279cc6ac5d6SJoseph Chen 	sha256_context sha256_ctx;
280e7b6c6a9SLin Jinhan 	sha512_context sha512_ctx;
281cc6ac5d6SJoseph Chen 	rsa_key rsa_key;
2828609b717SLin Jinhan 	u8 hard_out[256];
2838609b717SLin Jinhan 	u8 soft_out[64];
284cc6ac5d6SJoseph Chen 	u32 cap;
285cc6ac5d6SJoseph Chen 
286e7b6c6a9SLin Jinhan 	/* CRYPTO_V1 TODO: SHA512 is not available */
287e7b6c6a9SLin Jinhan #ifdef CONFIG_ROCKCHIP_CRYPTO_V1
288e7b6c6a9SLin Jinhan 	cap = CRYPTO_MD5 | CRYPTO_SHA1 | CRYPTO_SHA256 |
289e7b6c6a9SLin Jinhan 	      CRYPTO_RSA2048;
290e7b6c6a9SLin Jinhan #else
2918609b717SLin Jinhan 	cap = CRYPTO_MD5 | CRYPTO_SHA1 | CRYPTO_SHA256 |
2928609b717SLin Jinhan #if !defined(CONFIG_ROCKCHIP_RK1808)
2938609b717SLin Jinhan 	      CRYPTO_SHA512 |
2948609b717SLin Jinhan #endif
295c9d107b5SLin Jinhan 	      CRYPTO_RSA2048 | CRYPTO_TRNG;
296e7b6c6a9SLin Jinhan #endif
297cc6ac5d6SJoseph Chen 	dev = crypto_get_device(cap);
298cc6ac5d6SJoseph Chen 	if (!dev) {
299cc6ac5d6SJoseph Chen 		printf("Can't find crypto device for expected capability\n");
300cc6ac5d6SJoseph Chen 		return -ENODEV;
301cc6ac5d6SJoseph Chen 	}
302cc6ac5d6SJoseph Chen 
303cc6ac5d6SJoseph Chen 	/* MD5 */
304c9d107b5SLin Jinhan 	if (cap & CRYPTO_MD5) {
305*80ca1a53SLin Jinhan 		HASH_PERF_EVAL(dev, CRYPTO_MD5);
306cc6ac5d6SJoseph Chen 		csha_ctx.algo = CRYPTO_MD5;
307cc6ac5d6SJoseph Chen 		csha_ctx.length = sizeof(foo_data);
3088609b717SLin Jinhan 		memset(hard_out, 0x00, sizeof(hard_out));
309cc6ac5d6SJoseph Chen 		crypto_sha_csum(dev, &csha_ctx, (char *)foo_data,
3108609b717SLin Jinhan 				sizeof(foo_data), hard_out);
3118609b717SLin Jinhan 		md5(foo_data, sizeof(foo_data), soft_out);
3128609b717SLin Jinhan 		dump_hash("MD5", hard_out, soft_out,
313c9d107b5SLin Jinhan 			  crypto_algo_nbits(csha_ctx.algo));
314c9d107b5SLin Jinhan 	}
315cc6ac5d6SJoseph Chen 
316cc6ac5d6SJoseph Chen 	/* SHA1 */
317c9d107b5SLin Jinhan 	if (cap & CRYPTO_SHA1) {
318*80ca1a53SLin Jinhan 		HASH_PERF_EVAL(dev, CRYPTO_SHA1);
319cc6ac5d6SJoseph Chen 		csha_ctx.algo = CRYPTO_SHA1;
320cc6ac5d6SJoseph Chen 		csha_ctx.length = sizeof(foo_data);
3218609b717SLin Jinhan 		memset(hard_out, 0x00, sizeof(hard_out));
322cc6ac5d6SJoseph Chen 		crypto_sha_csum(dev, &csha_ctx, (char *)foo_data,
3238609b717SLin Jinhan 				sizeof(foo_data), hard_out);
324cc6ac5d6SJoseph Chen 		sha1_starts(&sha1_ctx);
325cc6ac5d6SJoseph Chen 		sha1_update(&sha1_ctx, (const u8 *)foo_data, sizeof(foo_data));
3268609b717SLin Jinhan 		sha1_finish(&sha1_ctx, soft_out);
3278609b717SLin Jinhan 		dump_hash("SHA1", hard_out, soft_out,
328c9d107b5SLin Jinhan 			  crypto_algo_nbits(csha_ctx.algo));
329c9d107b5SLin Jinhan 	}
330cc6ac5d6SJoseph Chen 
331e7b6c6a9SLin Jinhan 	/* SHA512 */
332c9d107b5SLin Jinhan 	if (cap & CRYPTO_SHA512) {
333*80ca1a53SLin Jinhan 		HASH_PERF_EVAL(dev, CRYPTO_SHA512);
334e7b6c6a9SLin Jinhan 		csha_ctx.algo = CRYPTO_SHA512;
335e7b6c6a9SLin Jinhan 		csha_ctx.length = sizeof(foo_data);
3368609b717SLin Jinhan 		memset(hard_out, 0x00, sizeof(hard_out));
337e7b6c6a9SLin Jinhan 		crypto_sha_csum(dev, &csha_ctx, (char *)foo_data,
3388609b717SLin Jinhan 				sizeof(foo_data), hard_out);
339e7b6c6a9SLin Jinhan 		sha512_starts(&sha512_ctx);
340c9d107b5SLin Jinhan 		sha512_update(&sha512_ctx, (const u8 *)foo_data,
341c9d107b5SLin Jinhan 			      sizeof(foo_data));
3428609b717SLin Jinhan 		sha512_finish(&sha512_ctx, soft_out);
3438609b717SLin Jinhan 		dump_hash("SHA512", hard_out, soft_out,
344e7b6c6a9SLin Jinhan 			  crypto_algo_nbits(csha_ctx.algo));
345c9d107b5SLin Jinhan 	}
346e7b6c6a9SLin Jinhan 
347cc6ac5d6SJoseph Chen 	/* SHA256 */
348c9d107b5SLin Jinhan 	if (cap & CRYPTO_SHA256) {
349*80ca1a53SLin Jinhan 		HASH_PERF_EVAL(dev, CRYPTO_SHA256);
350cc6ac5d6SJoseph Chen 		csha_ctx.algo = CRYPTO_SHA256;
351cc6ac5d6SJoseph Chen 		csha_ctx.length = sizeof(foo_data);
3528609b717SLin Jinhan 		memset(hard_out, 0x00, sizeof(hard_out));
353cc6ac5d6SJoseph Chen 		crypto_sha_csum(dev, &csha_ctx, (char *)foo_data,
3548609b717SLin Jinhan 				sizeof(foo_data), hard_out);
355cc6ac5d6SJoseph Chen 		sha256_starts(&sha256_ctx);
356c9d107b5SLin Jinhan 		sha256_update(&sha256_ctx, (const u8 *)foo_data,
357c9d107b5SLin Jinhan 			      sizeof(foo_data));
3588609b717SLin Jinhan 		sha256_finish(&sha256_ctx, soft_out);
3598609b717SLin Jinhan 		dump_hash("SHA256", hard_out, soft_out,
360cc6ac5d6SJoseph Chen 			  crypto_algo_nbits(csha_ctx.algo));
361c9d107b5SLin Jinhan 	}
362cc6ac5d6SJoseph Chen 
363cc6ac5d6SJoseph Chen 	/* RSA2048-SHA256 */
364*80ca1a53SLin Jinhan 	if (cap & CRYPTO_RSA2048) {
3655d8287bfSLin Jinhan 		memset(&rsa_key, 0x00, sizeof(rsa_key));
366cc6ac5d6SJoseph Chen 		rsa_key.algo = CRYPTO_RSA2048;
367cc6ac5d6SJoseph Chen 		rsa_key.n = (u32 *)&rsa2048_n;
368cc6ac5d6SJoseph Chen 		rsa_key.e = (u32 *)&rsa2048_e;
3695d8287bfSLin Jinhan #ifdef CONFIG_ROCKCHIP_CRYPTO_V1
370cc6ac5d6SJoseph Chen 		rsa_key.c = (u32 *)&rsa2048_c;
3715d8287bfSLin Jinhan #endif
3728609b717SLin Jinhan 		memset(hard_out, 0x00, sizeof(hard_out));
3738609b717SLin Jinhan 		crypto_rsa_verify(dev, &rsa_key, rsa2048_sha256_sign, hard_out);
3748609b717SLin Jinhan 		sha256_starts(&sha256_ctx);
3758609b717SLin Jinhan 		sha256_update(&sha256_ctx, (const u8 *)foo_data,
3768609b717SLin Jinhan 			      sizeof(foo_data));
3778609b717SLin Jinhan 		sha256_finish(&sha256_ctx, soft_out);
3788609b717SLin Jinhan 		dump_hash("RSA2048-SHA256", hard_out,
3798609b717SLin Jinhan 			  soft_out, crypto_algo_nbits(csha_ctx.algo));
380c9d107b5SLin Jinhan 	}
381c9d107b5SLin Jinhan 
382c9d107b5SLin Jinhan 	/* TRNG */
383c9d107b5SLin Jinhan 	if (cap & CRYPTO_TRNG) {
3848609b717SLin Jinhan 		memset(hard_out, 0x00, sizeof(hard_out));
3858609b717SLin Jinhan 		crypto_get_trng(dev, hard_out, sizeof(hard_out));
3868609b717SLin Jinhan 		dump_hex("TRNG", hard_out, sizeof(hard_out));
387c9d107b5SLin Jinhan 	}
388cc6ac5d6SJoseph Chen 
389cc6ac5d6SJoseph Chen 	return 0;
390cc6ac5d6SJoseph Chen }
391cc6ac5d6SJoseph Chen 
392cc6ac5d6SJoseph Chen U_BOOT_CMD(
393cc6ac5d6SJoseph Chen 	crypto, 1, 1, do_crypto,
394cc6ac5d6SJoseph Chen 	"crypto test",
395cc6ac5d6SJoseph Chen 	""
396cc6ac5d6SJoseph Chen );
397