1322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah#!/bin/bash
2322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
3322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
4322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah# Use of this source code is governed by a BSD-style license that can be
5322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah# found in the LICENSE file.
6322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
7322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah# Script to generate padding.c containing PKCS 1.5 padding byte arrays for
8322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah# various combinations of RSA key lengths and message digest algorithms. 
9322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
10322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav ShahPad_Preamble="0x00,0x01"
11322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
128bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav ShahSHA1_digestinfo="0x30,0x21,0x30,0x09,0x06,0x05,0x2b,0x0e,0x03,0x02,0x1a,0x05"\
13322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah",0x00,0x04,0x14"
148bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav ShahSHA256_digestinfo="0x30,0x31,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03"\
15322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah",0x04,0x02,0x01,0x05,0x00,0x04,0x20"
168bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav ShahSHA512_digestinfo="0x30,0x51,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03"\
17322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah",0x04,0x02,0x03,0x05,0x00,0x04,0x40"
18322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
19322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav ShahRSA1024_Len=128
20322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav ShahRSA2048_Len=256
21322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav ShahRSA4096_Len=512
22322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav ShahRSA8192_Len=1024
23322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
24322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav ShahSHA1_T_Len=35
25322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav ShahSHA256_T_Len=51
26322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav ShahSHA512_T_Len=83
27322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
28322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav ShahHashAlgos=( SHA1 SHA256 SHA512 )
29322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav ShahRSAAlgos=( RSA1024 RSA2048 RSA4096 RSA8192 ) 
30322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
31322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahfunction genFFOctets {
32322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah  count=$1
33322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah  while [ $count -gt 0 ]; do
34322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah    echo -n "0xff,"
35322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah    let count=count-1
36322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah  done
37322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah}
38322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
39322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
40322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahcat <<EOF
41322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah/*
42322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah * DO NOT MODIFY THIS FILE DIRECTLY.
43322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah *
44322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah * This file is automatically generated by genpadding.sh and contains padding
45322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah * arrays corresponding to various combinations of algorithms for RSA signatures.
46322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah */
47322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
48322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav ShahEOF
49322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
50322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
515411c7a9f03f91bf2c1cd1cf852db9d4585a05c9Gaurav Shahecho '#include "cryptolib.h"'
52322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho
53322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho
54322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahcat <<EOF 
55322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah/*
56322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah * PKCS 1.5 padding (from the RSA PKCS#1 v2.1 standard)
57322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah *
58322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah * Depending on the RSA key size and hash function, the padding is calculated
59322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah * as follows:
60322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah *
61322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah * 0x00 || 0x01 || PS || 0x00 || T
62322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah *
63322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah * T: DER Encoded DigestInfo value which depends on the hash function used.
64322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah *
65322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah * SHA-1:   (0x)30 21 30 09 06 05 2b 0e 03 02 1a 05 00 04 14 || H.
66322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah * SHA-256: (0x)30 31 30 0d 06 09 60 86 48 01 65 03 04 02 01 05 00 04 20 || H.
67322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah * SHA-512: (0x)30 51 30 0d 06 09 60 86 48 01 65 03 04 02 03 05 00 04 40 || H.
68322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah *
69322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah * Length(T) = 35 octets for SHA-1
70322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah * Length(T) = 51 octets for SHA-256
71322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah * Length(T) = 83 octets for SHA-512
72322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah *
73322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah * PS: octet string consisting of {Length(RSA Key) - Length(T) - 3} 0xFF
74322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah *
75322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah */
76322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav ShahEOF
77322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho
78322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho
79322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
80322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
81322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah# Generate padding arrays.
82322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahalgorithmcounter=0
83322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
84322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahfor rsaalgo in ${RSAAlgos[@]}
85322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahdo
86322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah  for hashalgo in ${HashAlgos[@]}
87322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah  do
88322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah    echo "/* Algorithm Type $algorithmcounter */"
89322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah    let algorithmcounter=algorithmcounter+1
90322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah    eval rsalen=${rsaalgo}_Len
91322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah    eval hashlen=${hashalgo}_T_Len
92322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah    let nums=rsalen-hashlen-3 
93322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah    echo "const uint8_t padding${rsaalgo}_${hashalgo}[${rsaalgo}NUMBYTES - ${hashalgo}_DIGEST_SIZE] = {"
94322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah    echo -n $Pad_Preamble,
95322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah    genFFOctets $nums
96322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah    echo -n "0x00,"
978bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah    eval digestinfo=\$${hashalgo}_digestinfo
988bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah    echo $digestinfo
99322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah    echo "};"
100322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah    echo
101322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah  done
102322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahdone
103322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
104322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho "const int kNumAlgorithms = $algorithmcounter;";
105322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho "#define NUMALGORITHMS $algorithmcounter"
106322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho
107322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
1088bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah# Output DigestInfo field lengths.
1098bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahcat <<EOF
1108bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah#define SHA1_DIGESTINFO_LEN 15
1118bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah#define SHA256_DIGESTINFO_LEN 19
1128bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah#define SHA512_DIGESTINFO_LEN 19
1138bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav ShahEOF
1148bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah
1158bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah
1168bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah# Generate DigestInfo arrays.
1178bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahfor hashalgo in ${HashAlgos[@]}
1188bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahdo
1198bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah  echo "const uint8_t ${hashalgo}_digestinfo[] = {"
1208bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah  eval digestinfo=\$${hashalgo}_digestinfo
1218bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah  echo $digestinfo
1228bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah  echo "};"
1238bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah  echo
1248bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahdone
1258bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah
1268bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah# Generate DigestInfo to size map.
1278bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahecho "const int digestinfo_size_map[] = {"
1288bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahfor rsaalgo in ${RSAAlgos[@]}
1298bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahdo
1308bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah  for hashalgo in ${HashAlgos[@]}
1318bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah  do
1328bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah    echo ${hashalgo}_DIGESTINFO_LEN,
1338bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah  done
1348bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahdone
1358bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahecho "};"
1368bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahecho
1378bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah
1388bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah# Generate algorithm signature length map.
139322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho "const int siglen_map[NUMALGORITHMS] = {"
140322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahfor rsaalgo in ${RSAAlgos[@]}
141322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahdo
142322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah  for hashalgo in ${HashAlgos[@]}
143322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah  do
144cae5fa613a947288262a63a2b89d1ffbb633f673Gaurav Shah    echo ${rsaalgo}NUMBYTES,
145322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah  done
146322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahdone
147322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho "};"
148322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho
149322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
1508bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah# Generate algorithm padding array map.
151322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho "const uint8_t* padding_map[NUMALGORITHMS] = {"
152322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahfor rsaalgo in ${RSAAlgos[@]}
153322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahdo
154322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah  for hashalgo in ${HashAlgos[@]}
155322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah  do
156322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah     echo padding${rsaalgo}_${hashalgo},
157322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah  done
158322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahdone
159322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho "};"
160322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho
161322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
1628bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah# Generate algorithm padding size map.
163322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho "const int padding_size_map[NUMALGORITHMS] = {"
164322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahfor rsaalgo in ${RSAAlgos[@]}
165322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahdo
166322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah  for hashalgo in ${HashAlgos[@]}
167322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah  do
168322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah    echo ${rsaalgo}NUMBYTES - ${hashalgo}_DIGEST_SIZE,
169322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah  done
170322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahdone
171322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho "};"
172322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho
173322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
1745411c7a9f03f91bf2c1cd1cf852db9d4585a05c9Gaurav Shah# Generate signature algorithm to messge digest algorithm map.
1755411c7a9f03f91bf2c1cd1cf852db9d4585a05c9Gaurav Shahecho "const int hash_type_map[] = {"
1765411c7a9f03f91bf2c1cd1cf852db9d4585a05c9Gaurav Shahfor rsaalgo in ${RSAAlgos[@]}
1775411c7a9f03f91bf2c1cd1cf852db9d4585a05c9Gaurav Shahdo
1785411c7a9f03f91bf2c1cd1cf852db9d4585a05c9Gaurav Shah  for hashalgo in ${HashAlgos[@]}
1795411c7a9f03f91bf2c1cd1cf852db9d4585a05c9Gaurav Shah  do
1805411c7a9f03f91bf2c1cd1cf852db9d4585a05c9Gaurav Shah    echo ${hashalgo}_DIGEST_ALGORITHM,
1815411c7a9f03f91bf2c1cd1cf852db9d4585a05c9Gaurav Shah  done
1825411c7a9f03f91bf2c1cd1cf852db9d4585a05c9Gaurav Shahdone
1835411c7a9f03f91bf2c1cd1cf852db9d4585a05c9Gaurav Shahecho "};"
1845411c7a9f03f91bf2c1cd1cf852db9d4585a05c9Gaurav Shahecho
1855411c7a9f03f91bf2c1cd1cf852db9d4585a05c9Gaurav Shah
1868bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah# Generate algorithm to message digest's output size map.
1878bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahecho "const int hash_size_map[NUMALGORITHMS] = {"
1888bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahfor rsaalgo in ${RSAAlgos[@]}
1898bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahdo
1908bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah  for hashalgo in ${HashAlgos[@]}
1918bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah  do
1928bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah    echo ${hashalgo}_DIGEST_SIZE,
1938bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah  done
1948bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahdone
1958bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahecho "};"
1968bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahecho
1978bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah
1988bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah# Generate algorithm to message digest's input block size map.
199322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho "const int hash_blocksize_map[NUMALGORITHMS] = {"
200322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahfor rsaalgo in ${RSAAlgos[@]}
201322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahdo
202322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah  for hashalgo in ${HashAlgos[@]}
203322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah  do
204322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah    echo ${hashalgo}_BLOCK_SIZE,
205322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah  done
206322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahdone
207322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho "};"
208322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho
209322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
2108bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah# Generate algorithm to message's digest ASN.1 DigestInfo map.
2118bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahecho "const uint8_t* hash_digestinfo_map[NUMALGORITHMS] = {"
2128bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahfor rsaalgo in ${RSAAlgos[@]}
2138bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahdo
2148bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah  for hashalgo in ${HashAlgos[@]}
2158bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah  do
2168bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah    echo ${hashalgo}_digestinfo,
2178bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah  done
2188bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahdone
2198bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahecho "};"
2208bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shahecho
2218bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah
2228bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah
223322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah# Generate algorithm description strings.
224322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho "const char* algo_strings[NUMALGORITHMS] = {"
225322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahfor rsaalgo in ${RSAAlgos[@]}
226322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahdo
227322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah  for hashalgo in ${HashAlgos[@]}
228322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah  do
229322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah    echo \"${rsaalgo} ${hashalgo}\",
230322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah  done
231322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahdone
232322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho "};"
233322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho
234322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
235322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah#echo "#endif  /* VBOOT_REFERENCE_PADDING_H_ */"
236