xref: /rk3399_rockchip-uboot/cmd/crypto.c (revision 5d8287bf264672b085e66d60b1f06231d78f7651)
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>
13cc6ac5d6SJoseph Chen 
14cc6ac5d6SJoseph Chen static u8 foo_data[] = {
15cc6ac5d6SJoseph Chen 	0x52, 0x53, 0x41, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
16cc6ac5d6SJoseph Chen 	0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd5, 0xf2, 0xfc, 0xbb,
18cc6ac5d6SJoseph Chen 	0x1a, 0x39, 0x61, 0xf5, 0x63, 0x7f, 0xa6, 0xeb, 0x5d, 0xc5, 0x22, 0xe2,
19cc6ac5d6SJoseph Chen 	0x65, 0x03, 0xcc, 0x61, 0x92, 0x60, 0x4c, 0x5f, 0x4e, 0x81, 0x96, 0x3d,
20cc6ac5d6SJoseph Chen 	0x89, 0x1d, 0xa3, 0x5c, 0xb7, 0x88, 0xc3, 0x75, 0xcd, 0x71, 0xf0, 0x16,
21cc6ac5d6SJoseph Chen 	0x04, 0x5e, 0xef, 0x85, 0xdf, 0x30, 0x57, 0x7e, 0x06, 0x0d, 0x44, 0x3b,
22cc6ac5d6SJoseph Chen 	0x80, 0x22, 0x41, 0xcd, 0xba, 0x40, 0xb5, 0xfa, 0xbe, 0x8f, 0xa9, 0x61,
23cc6ac5d6SJoseph Chen 	0x4d, 0xc6, 0x2a, 0xd9, 0x96, 0x57, 0x57, 0xc6, 0xc0, 0x99, 0xc0, 0x94,
24cc6ac5d6SJoseph Chen 	0x57, 0x21, 0x0a, 0xad, 0xde, 0x4c, 0xe1, 0xaa, 0x6e, 0x11, 0xc6, 0xeb,
25cc6ac5d6SJoseph Chen 	0xa2, 0x09, 0x65, 0xd9, 0xd5, 0xc6, 0x8f, 0x8d, 0xb6, 0xec, 0xb3, 0xca,
26cc6ac5d6SJoseph Chen 	0x29, 0xa4, 0x9f, 0xab, 0x90, 0x7e, 0xf2, 0x86, 0x92, 0x25, 0x71, 0xf4,
27cc6ac5d6SJoseph Chen 	0x17, 0x70, 0x92, 0xe0, 0xd0, 0xe2, 0xe1, 0x57, 0xc4, 0xca, 0x44, 0xbb,
28cc6ac5d6SJoseph Chen 	0x14, 0xdc, 0xf8, 0x1a, 0x27, 0x00, 0x8f, 0x30, 0xcd, 0x0a, 0x4a, 0x26,
29cc6ac5d6SJoseph Chen 	0x42, 0x07, 0xa1, 0x1e, 0x69, 0x7e, 0xfd, 0xc4, 0x38, 0xf8, 0x53, 0xfe,
30cc6ac5d6SJoseph Chen 	0xcd, 0xa7, 0xfc, 0x7d, 0xa1, 0x87, 0xe8, 0xec, 0x52, 0x01, 0x37, 0x43,
31cc6ac5d6SJoseph Chen 	0x0c, 0xf2, 0x2e, 0x89, 0x3d, 0xaa, 0xed, 0x9d, 0x83, 0x13, 0x8f, 0x79,
32cc6ac5d6SJoseph Chen 	0xec, 0xb3, 0x7f, 0xbe, 0xf9, 0x36, 0x99, 0x8d, 0x93, 0xc2, 0x4d, 0x8f,
33cc6ac5d6SJoseph Chen 	0x8f, 0x18, 0x1e, 0x94, 0x25, 0xe7, 0x0b, 0xdc, 0xd9, 0x85, 0x88, 0x77,
34cc6ac5d6SJoseph Chen 	0x7e, 0x25, 0x80, 0x10, 0xde, 0xb6, 0xdd, 0xe6, 0xb6, 0xba, 0xe9, 0x1d,
35cc6ac5d6SJoseph Chen 	0xac, 0xd2, 0xd7, 0x1c, 0x8e, 0x86, 0x5e, 0xd1, 0xc0, 0x97, 0x59, 0x79,
36cc6ac5d6SJoseph Chen 	0x7e, 0x1a, 0x96, 0x6a, 0xa1, 0x09, 0xc0, 0x45, 0xb0, 0x71, 0x2d, 0xd1,
37cc6ac5d6SJoseph Chen 	0x87, 0x6f, 0xbe, 0x31, 0x21, 0xcb, 0x52, 0xde, 0x48, 0x41, 0x73, 0x7e,
38cc6ac5d6SJoseph Chen 	0x4a, 0x2f, 0xf8, 0x95, 0x0c, 0x2d, 0xb4, 0x9d, 0x53, 0x70, 0xcd, 0xa5,
39cc6ac5d6SJoseph Chen 	0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
40cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
41cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
42cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 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, 0xa5, 0x0d, 0xc2, 0xc6, 0xf1, 0x08, 0x95, 0x55,
61cc6ac5d6SJoseph Chen 	0x1d, 0xb3, 0xf9, 0x43, 0xb0, 0x7b, 0x5b, 0x96, 0xa0, 0x72, 0xe8, 0xd6,
62cc6ac5d6SJoseph Chen 	0x95, 0xd6, 0x98, 0xec, 0x53, 0x6b, 0x85, 0x77, 0x74, 0x21, 0xf1, 0x22,
63cc6ac5d6SJoseph Chen 	0x5c, 0x4d, 0x56, 0x55, 0x89, 0x0d, 0x60, 0xa5, 0x2b, 0x68, 0xf8, 0x71,
64cc6ac5d6SJoseph Chen 	0x6d, 0x72, 0xed, 0x67, 0x55, 0x3e, 0x5f, 0xd1, 0x9e, 0x21, 0xa7, 0x6e,
65cc6ac5d6SJoseph Chen 	0x5c, 0xf2, 0xac, 0xe8, 0x66, 0x1d, 0x4e, 0xe5, 0x58, 0x76, 0xed, 0x2b,
66cc6ac5d6SJoseph Chen 	0xfe, 0x2b, 0xc9, 0xf6, 0x7f, 0xb7, 0x02, 0x27, 0xfd, 0x25, 0x3f, 0x2d,
67cc6ac5d6SJoseph Chen 	0x7c, 0x1c, 0x37, 0x80, 0x29, 0x7f, 0x12, 0xd2, 0xd5, 0xae, 0x27, 0xc6,
68cc6ac5d6SJoseph Chen 	0x68, 0x24, 0x83, 0xc5, 0x61, 0x8b, 0xea, 0x1a, 0xbd, 0x07, 0x96, 0xe4,
69cc6ac5d6SJoseph Chen 	0xd1, 0xc5, 0xd4, 0x21, 0x39, 0x4a, 0xaa, 0x66, 0xd2, 0x3f, 0xd2, 0x67,
70cc6ac5d6SJoseph Chen 	0x55, 0x39, 0xbf, 0x40, 0x66, 0x66, 0x5a, 0x92, 0xdd, 0x8d, 0xda, 0x5a,
71cc6ac5d6SJoseph Chen 	0x89, 0x7e, 0x78, 0xd9, 0x5f, 0x42, 0xe4, 0x16, 0xdb, 0x76, 0x49, 0xe0,
72cc6ac5d6SJoseph Chen 	0x71, 0x98, 0x8e, 0xed, 0x61, 0xd9, 0x63, 0x0a, 0x11, 0xf6, 0x24, 0x7f,
73cc6ac5d6SJoseph Chen 	0x9b, 0xf2, 0xee, 0xfc, 0xa4, 0x4c, 0x98, 0x81, 0xfb, 0x2d, 0xd3, 0x8f,
74cc6ac5d6SJoseph Chen 	0x29, 0x77, 0x63, 0xd9, 0x51, 0xfc, 0xe1, 0x17, 0x3f, 0xc3, 0xce, 0xca,
75cc6ac5d6SJoseph Chen 	0xbe, 0xec, 0xf2, 0xc9, 0x07, 0x48, 0x74, 0x54, 0xbb, 0x1d, 0x02, 0xe7,
76cc6ac5d6SJoseph Chen 	0xaf, 0x18, 0x27, 0x39, 0xb8, 0xc4, 0x90, 0x05, 0x20, 0x5b, 0x38, 0x7b,
77cc6ac5d6SJoseph Chen 	0x3a, 0x15, 0x94, 0x7e, 0xe8, 0xc1, 0xa5, 0x8c, 0xc0, 0x6c, 0x86, 0x96,
78cc6ac5d6SJoseph Chen 	0xeb, 0x46, 0xfa, 0xad, 0x2e, 0x69, 0x12, 0x56, 0xb9, 0x51, 0x91, 0x9c,
79cc6ac5d6SJoseph Chen 	0xea, 0x83, 0x4b, 0xd3, 0x5f, 0xb7, 0xdd, 0x29, 0x99, 0xb9, 0x66, 0x65,
80cc6ac5d6SJoseph Chen 	0x5e, 0xe2, 0x59, 0x16, 0x20, 0xa2, 0xda, 0x0e, 0x8e, 0xd4, 0x41, 0xdc,
81cc6ac5d6SJoseph Chen 	0x1e, 0x75, 0x32, 0xf8, 0x73, 0xfa, 0x22, 0x7b, 0x22, 0x7c, 0x7d, 0x9d,
82cc6ac5d6SJoseph Chen 	0x03, 0x89, 0x54, 0x27, 0x8f, 0xbb, 0x12, 0xbb, 0x29, 0x0a, 0xe0, 0x41,
83cc6ac5d6SJoseph Chen 	0x4e, 0x80, 0x1b, 0x3f, 0x9c, 0x6d, 0xc1, 0x79, 0xdb, 0x3c, 0xc4, 0xd2,
84cc6ac5d6SJoseph Chen 	0x65, 0x99, 0xd7, 0x16, 0xff, 0xff, 0xff, 0xff, 0xd1, 0x95, 0x46, 0x66,
85cc6ac5d6SJoseph Chen 	0x83, 0xe2, 0x1b, 0xd4, 0x35, 0x1f, 0x5d, 0xf2, 0x1e, 0xb5, 0x43, 0x22,
86cc6ac5d6SJoseph Chen 	0xe4, 0x41, 0xe6, 0x6a, 0x46, 0x93, 0x24, 0x89, 0x1b, 0x74, 0x3c, 0xa0,
87cc6ac5d6SJoseph Chen 	0x20, 0x3b, 0x4e, 0x64, 0xff, 0xff, 0xff, 0xff,
88cc6ac5d6SJoseph Chen };
89cc6ac5d6SJoseph Chen 
90cc6ac5d6SJoseph Chen static u8 rsa2048_n[] = {
91cc6ac5d6SJoseph Chen 	0xd5, 0xf2, 0xfc, 0xbb, 0x1a, 0x39, 0x61, 0xf5, 0x63, 0x7f, 0xa6, 0xeb,
92cc6ac5d6SJoseph Chen 	0x5d, 0xc5, 0x22, 0xe2, 0x65, 0x03, 0xcc, 0x61, 0x92, 0x60, 0x4c, 0x5f,
93cc6ac5d6SJoseph Chen 	0x4e, 0x81, 0x96, 0x3d, 0x89, 0x1d, 0xa3, 0x5c, 0xb7, 0x88, 0xc3, 0x75,
94cc6ac5d6SJoseph Chen 	0xcd, 0x71, 0xf0, 0x16, 0x04, 0x5e, 0xef, 0x85, 0xdf, 0x30, 0x57, 0x7e,
95cc6ac5d6SJoseph Chen 	0x06, 0x0d, 0x44, 0x3b, 0x80, 0x22, 0x41, 0xcd, 0xba, 0x40, 0xb5, 0xfa,
96cc6ac5d6SJoseph Chen 	0xbe, 0x8f, 0xa9, 0x61, 0x4d, 0xc6, 0x2a, 0xd9, 0x96, 0x57, 0x57, 0xc6,
97cc6ac5d6SJoseph Chen 	0xc0, 0x99, 0xc0, 0x94, 0x57, 0x21, 0x0a, 0xad, 0xde, 0x4c, 0xe1, 0xaa,
98cc6ac5d6SJoseph Chen 	0x6e, 0x11, 0xc6, 0xeb, 0xa2, 0x09, 0x65, 0xd9, 0xd5, 0xc6, 0x8f, 0x8d,
99cc6ac5d6SJoseph Chen 	0xb6, 0xec, 0xb3, 0xca, 0x29, 0xa4, 0x9f, 0xab, 0x90, 0x7e, 0xf2, 0x86,
100cc6ac5d6SJoseph Chen 	0x92, 0x25, 0x71, 0xf4, 0x17, 0x70, 0x92, 0xe0, 0xd0, 0xe2, 0xe1, 0x57,
101cc6ac5d6SJoseph Chen 	0xc4, 0xca, 0x44, 0xbb, 0x14, 0xdc, 0xf8, 0x1a, 0x27, 0x00, 0x8f, 0x30,
102cc6ac5d6SJoseph Chen 	0xcd, 0x0a, 0x4a, 0x26, 0x42, 0x07, 0xa1, 0x1e, 0x69, 0x7e, 0xfd, 0xc4,
103cc6ac5d6SJoseph Chen 	0x38, 0xf8, 0x53, 0xfe, 0xcd, 0xa7, 0xfc, 0x7d, 0xa1, 0x87, 0xe8, 0xec,
104cc6ac5d6SJoseph Chen 	0x52, 0x01, 0x37, 0x43, 0x0c, 0xf2, 0x2e, 0x89, 0x3d, 0xaa, 0xed, 0x9d,
105cc6ac5d6SJoseph Chen 	0x83, 0x13, 0x8f, 0x79, 0xec, 0xb3, 0x7f, 0xbe, 0xf9, 0x36, 0x99, 0x8d,
106cc6ac5d6SJoseph Chen 	0x93, 0xc2, 0x4d, 0x8f, 0x8f, 0x18, 0x1e, 0x94, 0x25, 0xe7, 0x0b, 0xdc,
107cc6ac5d6SJoseph Chen 	0xd9, 0x85, 0x88, 0x77, 0x7e, 0x25, 0x80, 0x10, 0xde, 0xb6, 0xdd, 0xe6,
108cc6ac5d6SJoseph Chen 	0xb6, 0xba, 0xe9, 0x1d, 0xac, 0xd2, 0xd7, 0x1c, 0x8e, 0x86, 0x5e, 0xd1,
109cc6ac5d6SJoseph Chen 	0xc0, 0x97, 0x59, 0x79, 0x7e, 0x1a, 0x96, 0x6a, 0xa1, 0x09, 0xc0, 0x45,
110cc6ac5d6SJoseph Chen 	0xb0, 0x71, 0x2d, 0xd1, 0x87, 0x6f, 0xbe, 0x31, 0x21, 0xcb, 0x52, 0xde,
111cc6ac5d6SJoseph Chen 	0x48, 0x41, 0x73, 0x7e, 0x4a, 0x2f, 0xf8, 0x95, 0x0c, 0x2d, 0xb4, 0x9d,
112cc6ac5d6SJoseph Chen 	0x53, 0x70, 0xcd, 0xa5,
113cc6ac5d6SJoseph Chen };
114cc6ac5d6SJoseph Chen 
115cc6ac5d6SJoseph Chen static u8 rsa2048_e[] = {
116cc6ac5d6SJoseph Chen 	0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
117cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
118cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
119cc6ac5d6SJoseph Chen 	0x00, 0x00, 0x00, 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,
138cc6ac5d6SJoseph Chen };
139cc6ac5d6SJoseph Chen 
140*5d8287bfSLin Jinhan #ifdef CONFIG_ROCKCHIP_CRYPTO_V1
141cc6ac5d6SJoseph Chen static u8 rsa2048_c[] = {
142cc6ac5d6SJoseph Chen 	0xa5, 0x0d, 0xc2, 0xc6, 0xf1, 0x08, 0x95, 0x55, 0x1d, 0xb3, 0xf9, 0x43,
143cc6ac5d6SJoseph Chen 	0xb0, 0x7b, 0x5b, 0x96, 0xa0, 0x72, 0xe8, 0xd6, 0x95, 0xd6, 0x98, 0xec,
144cc6ac5d6SJoseph Chen 	0x53, 0x6b, 0x85, 0x77, 0x74, 0x21, 0xf1, 0x22, 0x5c, 0x4d, 0x56, 0x55,
145cc6ac5d6SJoseph Chen 	0x89, 0x0d, 0x60, 0xa5, 0x2b, 0x68, 0xf8, 0x71, 0x6d, 0x72, 0xed, 0x67,
146cc6ac5d6SJoseph Chen 	0x55, 0x3e, 0x5f, 0xd1, 0x9e, 0x21, 0xa7, 0x6e, 0x5c, 0xf2, 0xac, 0xe8,
147cc6ac5d6SJoseph Chen 	0x66, 0x1d, 0x4e, 0xe5, 0x58, 0x76, 0xed, 0x2b, 0xfe, 0x2b, 0xc9, 0xf6,
148cc6ac5d6SJoseph Chen 	0x7f, 0xb7, 0x02, 0x27, 0xfd, 0x25, 0x3f, 0x2d, 0x7c, 0x1c, 0x37, 0x80,
149cc6ac5d6SJoseph Chen 	0x29, 0x7f, 0x12, 0xd2, 0xd5, 0xae, 0x27, 0xc6, 0x68, 0x24, 0x83, 0xc5,
150cc6ac5d6SJoseph Chen 	0x61, 0x8b, 0xea, 0x1a, 0xbd, 0x07, 0x96, 0xe4, 0xd1, 0xc5, 0xd4, 0x21,
151cc6ac5d6SJoseph Chen 	0x39, 0x4a, 0xaa, 0x66, 0xd2, 0x3f, 0xd2, 0x67, 0x55, 0x39, 0xbf, 0x40,
152cc6ac5d6SJoseph Chen 	0x66, 0x66, 0x5a, 0x92, 0xdd, 0x8d, 0xda, 0x5a, 0x89, 0x7e, 0x78, 0xd9,
153cc6ac5d6SJoseph Chen 	0x5f, 0x42, 0xe4, 0x16, 0xdb, 0x76, 0x49, 0xe0, 0x71, 0x98, 0x8e, 0xed,
154cc6ac5d6SJoseph Chen 	0x61, 0xd9, 0x63, 0x0a, 0x11, 0xf6, 0x24, 0x7f, 0x9b, 0xf2, 0xee, 0xfc,
155cc6ac5d6SJoseph Chen 	0xa4, 0x4c, 0x98, 0x81, 0xfb, 0x2d, 0xd3, 0x8f, 0x29, 0x77, 0x63, 0xd9,
156cc6ac5d6SJoseph Chen 	0x51, 0xfc, 0xe1, 0x17, 0x3f, 0xc3, 0xce, 0xca, 0xbe, 0xec, 0xf2, 0xc9,
157cc6ac5d6SJoseph Chen 	0x07, 0x48, 0x74, 0x54, 0xbb, 0x1d, 0x02, 0xe7, 0xaf, 0x18, 0x27, 0x39,
158cc6ac5d6SJoseph Chen 	0xb8, 0xc4, 0x90, 0x05, 0x20, 0x5b, 0x38, 0x7b, 0x3a, 0x15, 0x94, 0x7e,
159cc6ac5d6SJoseph Chen 	0xe8, 0xc1, 0xa5, 0x8c, 0xc0, 0x6c, 0x86, 0x96, 0xeb, 0x46, 0xfa, 0xad,
160cc6ac5d6SJoseph Chen 	0x2e, 0x69, 0x12, 0x56, 0xb9, 0x51, 0x91, 0x9c, 0xea, 0x83, 0x4b, 0xd3,
161cc6ac5d6SJoseph Chen 	0x5f, 0xb7, 0xdd, 0x29, 0x99, 0xb9, 0x66, 0x65, 0x5e, 0xe2, 0x59, 0x16,
162cc6ac5d6SJoseph Chen 	0x20, 0xa2, 0xda, 0x0e, 0x8e, 0xd4, 0x41, 0xdc, 0x1e, 0x75, 0x32, 0xf8,
163cc6ac5d6SJoseph Chen 	0x73, 0xfa, 0x22, 0x7b,
164cc6ac5d6SJoseph Chen };
165*5d8287bfSLin Jinhan #endif
166cc6ac5d6SJoseph Chen 
167cc6ac5d6SJoseph Chen /* RSA2048-SHA256 sign data of foo_data[] */
168cc6ac5d6SJoseph Chen static u8 rsa2048_sha256_sign[] = {
169cc6ac5d6SJoseph Chen 	0xd4, 0x05, 0x21, 0x34, 0x2c, 0x92, 0xaf, 0x73, 0x72, 0x13, 0x54, 0x92,
170cc6ac5d6SJoseph Chen 	0x9b, 0x57, 0x63, 0x82, 0xd4, 0x7c, 0x41, 0xba, 0x58, 0x3e, 0xa6, 0x82,
171cc6ac5d6SJoseph Chen 	0xe8, 0x56, 0x9f, 0x1c, 0xc2, 0x6d, 0x07, 0x6d, 0xe0, 0xca, 0x4c, 0x93,
172cc6ac5d6SJoseph Chen 	0xb4, 0xa4, 0x82, 0x53, 0x41, 0x58, 0xeb, 0x77, 0xd5, 0x2c, 0xf5, 0x3f,
173cc6ac5d6SJoseph Chen 	0x3d, 0x1b, 0x54, 0x1b, 0x6a, 0x18, 0x30, 0xc1, 0x93, 0x14, 0x8f, 0xdd,
174cc6ac5d6SJoseph Chen 	0x77, 0xe4, 0xed, 0xb8, 0xd3, 0xfc, 0x63, 0xed, 0x88, 0x2f, 0xf4, 0x35,
175cc6ac5d6SJoseph Chen 	0xc4, 0xdb, 0x89, 0x94, 0x4a, 0xcd, 0x88, 0x88, 0x4f, 0xc3, 0xeb, 0x14,
176cc6ac5d6SJoseph Chen 	0x03, 0xd9, 0x85, 0x2e, 0x7a, 0x27, 0xbd, 0xc9, 0x19, 0xbf, 0x55, 0x50,
177cc6ac5d6SJoseph Chen 	0x2a, 0x29, 0x23, 0x02, 0xe4, 0xaf, 0x16, 0x5c, 0x17, 0x81, 0x38, 0x79,
178cc6ac5d6SJoseph Chen 	0xf1, 0x2b, 0x9a, 0xc7, 0xd2, 0x9d, 0x66, 0xca, 0xf7, 0x6b, 0xf0, 0x83,
179cc6ac5d6SJoseph Chen 	0x81, 0x57, 0xfc, 0x56, 0xae, 0x6d, 0x98, 0xae, 0xe2, 0xec, 0x00, 0x19,
180cc6ac5d6SJoseph Chen 	0x6b, 0x75, 0x06, 0xdc, 0x1c, 0x6e, 0xbd, 0x23, 0x15, 0xb1, 0x3a, 0x43,
181cc6ac5d6SJoseph Chen 	0x7e, 0x3c, 0x8b, 0x32, 0x9c, 0x4d, 0xa2, 0xcf, 0x14, 0xee, 0xd8, 0x7a,
182cc6ac5d6SJoseph Chen 	0x12, 0x90, 0x70, 0xd2, 0x9f, 0xd5, 0x6d, 0x50, 0x67, 0x35, 0x93, 0x97,
183cc6ac5d6SJoseph Chen 	0x2e, 0xff, 0x8f, 0xbf, 0x34, 0x4c, 0xa9, 0xee, 0x6a, 0xaa, 0x87, 0x09,
184cc6ac5d6SJoseph Chen 	0x1f, 0x6b, 0xcc, 0x3d, 0xeb, 0x88, 0xca, 0x8f, 0x45, 0x86, 0xb7, 0xb2,
185cc6ac5d6SJoseph Chen 	0xd6, 0xd8, 0xe5, 0x3e, 0x94, 0x02, 0x4b, 0xa7, 0x74, 0xb8, 0x5f, 0x1f,
186cc6ac5d6SJoseph Chen 	0xe3, 0xbc, 0x95, 0x72, 0x3b, 0x51, 0xd4, 0xec, 0x8d, 0x87, 0xca, 0xb0,
187cc6ac5d6SJoseph Chen 	0x69, 0xca, 0xa9, 0x68, 0xfc, 0x34, 0xf9, 0xb5, 0x67, 0xef, 0xac, 0xc2,
188cc6ac5d6SJoseph Chen 	0x10, 0x1a, 0x39, 0x56, 0xcb, 0x38, 0x45, 0x92, 0x74, 0x2e, 0x24, 0x1c,
189cc6ac5d6SJoseph Chen 	0x4e, 0x31, 0x80, 0xd9, 0x2d, 0x5f, 0x74, 0x48, 0xfe, 0x46, 0x4e, 0xf6,
190cc6ac5d6SJoseph Chen 	0x19, 0x9a, 0x1d, 0x32,
191cc6ac5d6SJoseph Chen };
192cc6ac5d6SJoseph Chen 
193cc6ac5d6SJoseph Chen static void dump(const char *title, void *hard_d, void *soft_d, u32 nbits)
194cc6ac5d6SJoseph Chen {
195cc6ac5d6SJoseph Chen 	int i, same;
196cc6ac5d6SJoseph Chen 	char *buf;
197cc6ac5d6SJoseph Chen 
198cc6ac5d6SJoseph Chen 	same = !memcmp(hard_d, soft_d, BITS2BYTE(nbits));
199cc6ac5d6SJoseph Chen 	printf("[%s]: %s\n", title, same ? "OK" : "FAIL");
200cc6ac5d6SJoseph Chen 
201cc6ac5d6SJoseph Chen 	printf("    hard: ");
202cc6ac5d6SJoseph Chen 	buf = hard_d;
203cc6ac5d6SJoseph Chen 	for (i = 0; i < BITS2BYTE(nbits); i++)
204cc6ac5d6SJoseph Chen 		printf("%02x ", buf[i]);
205cc6ac5d6SJoseph Chen 
206cc6ac5d6SJoseph Chen 	printf("\n    soft: ");
207cc6ac5d6SJoseph Chen 	buf = soft_d;
208cc6ac5d6SJoseph Chen 	for (i = 0; i < BITS2BYTE(nbits); i++)
209cc6ac5d6SJoseph Chen 		printf("%02x ", buf[i]);
210cc6ac5d6SJoseph Chen 
211cc6ac5d6SJoseph Chen 	printf("\n\n");
212cc6ac5d6SJoseph Chen }
213cc6ac5d6SJoseph Chen 
214cc6ac5d6SJoseph Chen static int do_crypto(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
215cc6ac5d6SJoseph Chen {
216cc6ac5d6SJoseph Chen 	struct udevice *dev;
217cc6ac5d6SJoseph Chen 	sha_context csha_ctx;
218cc6ac5d6SJoseph Chen 	sha1_context sha1_ctx;
219cc6ac5d6SJoseph Chen 	sha256_context sha256_ctx;
220cc6ac5d6SJoseph Chen 	rsa_key rsa_key;
221cc6ac5d6SJoseph Chen 	u8 sha256_out0[32];
222cc6ac5d6SJoseph Chen 	u8 sha256_out1[32];
223cc6ac5d6SJoseph Chen 	u8 sha1_out0[20];
224cc6ac5d6SJoseph Chen 	u8 sha1_out1[20];
225*5d8287bfSLin Jinhan 	u8 rsa_out[256];
226cc6ac5d6SJoseph Chen 	u8 md5_out0[16];
227cc6ac5d6SJoseph Chen 	u8 md5_out1[16];
228cc6ac5d6SJoseph Chen 	u32 cap;
229cc6ac5d6SJoseph Chen 
230cc6ac5d6SJoseph Chen 	cap = CRYPTO_MD5 | CRYPTO_SHA1 | CRYPTO_SHA256 | CRYPTO_RSA2048;
231cc6ac5d6SJoseph Chen 	dev = crypto_get_device(cap);
232cc6ac5d6SJoseph Chen 	if (!dev) {
233cc6ac5d6SJoseph Chen 		printf("Can't find crypto device for expected capability\n");
234cc6ac5d6SJoseph Chen 		return -ENODEV;
235cc6ac5d6SJoseph Chen 	}
236cc6ac5d6SJoseph Chen 
237cc6ac5d6SJoseph Chen 	/* MD5 */
238cc6ac5d6SJoseph Chen 	csha_ctx.algo = CRYPTO_MD5;
239cc6ac5d6SJoseph Chen 	csha_ctx.length = sizeof(foo_data);
240cc6ac5d6SJoseph Chen 	crypto_sha_csum(dev, &csha_ctx, (char *)foo_data,
241cc6ac5d6SJoseph Chen 			sizeof(foo_data), md5_out0);
242cc6ac5d6SJoseph Chen 	md5(foo_data, sizeof(foo_data), md5_out1);
243cc6ac5d6SJoseph Chen 	dump("MD5", md5_out0, md5_out1, crypto_algo_nbits(csha_ctx.algo));
244cc6ac5d6SJoseph Chen 
245cc6ac5d6SJoseph Chen 	/* SHA1 */
246cc6ac5d6SJoseph Chen 	csha_ctx.algo = CRYPTO_SHA1;
247cc6ac5d6SJoseph Chen 	csha_ctx.length = sizeof(foo_data);
248cc6ac5d6SJoseph Chen 	crypto_sha_csum(dev, &csha_ctx, (char *)foo_data,
249cc6ac5d6SJoseph Chen 			sizeof(foo_data), sha1_out0);
250cc6ac5d6SJoseph Chen 	sha1_starts(&sha1_ctx);
251cc6ac5d6SJoseph Chen 	sha1_update(&sha1_ctx, (const u8 *)foo_data, sizeof(foo_data));
252cc6ac5d6SJoseph Chen 	sha1_finish(&sha1_ctx, sha1_out1);
253cc6ac5d6SJoseph Chen 	dump("SHA1", sha1_out0, sha1_out1, crypto_algo_nbits(csha_ctx.algo));
254cc6ac5d6SJoseph Chen 
255cc6ac5d6SJoseph Chen 	/* SHA256 */
256cc6ac5d6SJoseph Chen 	csha_ctx.algo = CRYPTO_SHA256;
257cc6ac5d6SJoseph Chen 	csha_ctx.length = sizeof(foo_data);
258cc6ac5d6SJoseph Chen 	crypto_sha_csum(dev, &csha_ctx, (char *)foo_data,
259cc6ac5d6SJoseph Chen 			sizeof(foo_data), sha256_out0);
260cc6ac5d6SJoseph Chen 	sha256_starts(&sha256_ctx);
261cc6ac5d6SJoseph Chen 	sha256_update(&sha256_ctx, (const u8 *)foo_data, sizeof(foo_data));
262cc6ac5d6SJoseph Chen 	sha256_finish(&sha256_ctx, sha256_out1);
263cc6ac5d6SJoseph Chen 	dump("SHA256", sha256_out0, sha256_out1,
264cc6ac5d6SJoseph Chen 	     crypto_algo_nbits(csha_ctx.algo));
265cc6ac5d6SJoseph Chen 
266cc6ac5d6SJoseph Chen 	/* RSA2048-SHA256 */
267*5d8287bfSLin Jinhan 	memset(&rsa_key, 0x00, sizeof(rsa_key));
268cc6ac5d6SJoseph Chen 	rsa_key.algo = CRYPTO_RSA2048;
269cc6ac5d6SJoseph Chen 	rsa_key.n = (u32 *)&rsa2048_n;
270cc6ac5d6SJoseph Chen 	rsa_key.e = (u32 *)&rsa2048_e;
271*5d8287bfSLin Jinhan #ifdef CONFIG_ROCKCHIP_CRYPTO_V1
272cc6ac5d6SJoseph Chen 	rsa_key.c = (u32 *)&rsa2048_c;
273*5d8287bfSLin Jinhan #endif
274cc6ac5d6SJoseph Chen 	crypto_rsa_verify(dev, &rsa_key, rsa2048_sha256_sign, rsa_out);
275cc6ac5d6SJoseph Chen 	dump("RSA2048-SHA256", rsa_out,
276cc6ac5d6SJoseph Chen 	     sha256_out1, crypto_algo_nbits(csha_ctx.algo));
277cc6ac5d6SJoseph Chen 
278cc6ac5d6SJoseph Chen 	return 0;
279cc6ac5d6SJoseph Chen }
280cc6ac5d6SJoseph Chen 
281cc6ac5d6SJoseph Chen U_BOOT_CMD(
282cc6ac5d6SJoseph Chen 	crypto, 1, 1, do_crypto,
283cc6ac5d6SJoseph Chen 	"crypto test",
284cc6ac5d6SJoseph Chen 	""
285cc6ac5d6SJoseph Chen );
286