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