1313# ---- SCRIPT SETTINGS -------------------------------------------------------
1414
1515# output C header file to write cert/key buffers to
16- my $outputFile = " ./wolfssl/certs_test.h" ;
16+ my $outputFile = " ./wolfssl/certs_test.h" ;
17+ my $outputFileSM = " ./wolfssl/certs_test_sm.h" ;
1718
1819# ecc keys and certs to be converted
1920# Used with HAVE_ECC && USE_CERT_BUFFERS_256
109110 [ " ./certs/dh4096.der" , " dh_key_der_4096" ],
110111 );
111112
113+ # SM ciphers PRM format in certs/sm2
114+ my @fileList_sm2 = (
115+ [ " ./certs/sm2/ca-sm2.pem" , " ca_sm2" ],
116+ [ " ./certs/sm2/ca-sm2-key.pem" , " ca_sm2_key" ],
117+ [ " ./certs/sm2/ca-sm2-priv.pem" , " ca_sm2_priv" ],
118+ [ " ./certs/sm2/client-sm2.pem" , " client_sm2" ],
119+ [ " ./certs/sm2/client-sm2-key.pem" , " client_sm2_key" ],
120+ [ " ./certs/sm2/client-sm2-priv.pem" , " client_sm2_priv" ],
121+ [ " ./certs/sm2/root-sm2.pem" , " root_sm2" ],
122+ [ " ./certs/sm2/root-sm2-key.pem" , " root_sm2_key" ],
123+ [ " ./certs/sm2/root-sm2-priv.pem" , " root_sm2_priv" ],
124+ [ " ./certs/sm2/self-sm2-cert.pem" , " self_sm2_cert" ],
125+ [ " ./certs/sm2/self-sm2-key.pem" , " self_sm2_key" ],
126+ [ " ./certs/sm2/self-sm2-priv.pem" , " self_sm2_priv" ],
127+ [ " ./certs/sm2/server-sm2.pem" , " server_sm2" ],
128+ [ " ./certs/sm2/server-sm2-cert.pem" , " server_sm2_cert" ],
129+ [ " ./certs/sm2/server-sm2-key.pem" , " server_sm2_key" ],
130+ [ " ./certs/sm2/server-sm2-priv.pem" , " server_sm2_priv" ],
131+ );
132+
133+ my @fileList_sm2_der = (
134+ [ " ./certs/sm2/ca-sm2.der" , " ca_sm2_der" ],
135+ [ " ./certs/sm2/ca-sm2-key.der" , " ca_sm2_key_der" ],
136+ [ " ./certs/sm2/ca-sm2-priv.der" , " ca_sm2_priv_der" ],
137+ [ " ./certs/sm2/client-sm2.der" , " client_sm2_der" ],
138+ [ " ./certs/sm2/client-sm2-key.der" , " client_sm2_key_der" ],
139+ [ " ./certs/sm2/client-sm2-priv.der" , " client_sm2_priv_der" ],
140+ [ " ./certs/sm2/root-sm2.der" , " root_sm2_der" ],
141+ [ " ./certs/sm2/root-sm2-key.der" , " root_sm2_key_der" ],
142+ [ " ./certs/sm2/root-sm2-priv.der" , " root_sm2_priv_der" ],
143+ [ " ./certs/sm2/server-sm2.der" , " server_sm2_der" ],
144+ [ " ./certs/sm2/server-sm2-key.der" , " server_sm2_key_der" ],
145+ [ " ./certs/sm2/server-sm2-priv.der" , " server_sm2_priv_der" ],
146+ );
147+
112148# Falcon Post-Quantum Keys
113149# Used with HAVE_PQC
114150my @fileList_falcon = (
130166
131167# ----------------------------------------------------------------------------
132168
133- my $num_ecc = @fileList_ecc ;
134- my $num_ed = @fileList_ed ;
135- my $num_x = @fileList_x ;
136- my $num_1024 = @fileList_1024 ;
137- my $num_2048 = @fileList_2048 ;
138- my $num_3072 = @fileList_3072 ;
139- my $num_4096 = @fileList_4096 ;
140- my $num_falcon = @fileList_falcon ;
141- my $num_sphincs = @fileList_sphincs ;
169+ my $num_ecc = @fileList_ecc ;
170+ my $num_ed = @fileList_ed ;
171+ my $num_x = @fileList_x ;
172+ my $num_1024 = @fileList_1024 ;
173+ my $num_2048 = @fileList_2048 ;
174+ my $num_3072 = @fileList_3072 ;
175+ my $num_4096 = @fileList_4096 ;
176+ my $num_sm2 = @fileList_sm2 ;
177+ my $num_sm2_der = @fileList_sm2_der ;
178+ my $num_falcon = @fileList_falcon ;
179+ my $num_sphincs = @fileList_sphincs ;
142180
143181# open our output file, "+>" creates and/or truncates
144182open OUT_FILE, " +>" , $outputFile or die $! ;
22022240# close certs_test.h file
22032241close OUT_FILE or die $! ;
22042242
2243+ # ---------------------------------------------------------------------------
2244+ # open our output file, "+>" creates and/or truncates
2245+ open OUT_FILE_SM, " +>" , $outputFileSM or die $! ;
2246+
2247+ print OUT_FILE_SM " /* certs_test_sm.h */\n " ;
2248+ print OUT_FILE_SM " /* This file was generated using: ./gencertbuf.pl */\n\n " ;
2249+ print OUT_FILE_SM " #ifndef WOLFSSL_CERTS_TEST_SM_H\n " ;
2250+ print OUT_FILE_SM " #define WOLFSSL_CERTS_TEST_SM_H\n\n " ;
2251+ print OUT_FILE_SM " #if defined(WOLFSSL_SM2) || defined(WOLFSSL_SM3) || defined(WOLFSSL_SM4)\n\n " ;
2252+ print OUT_FILE_SM " /* DER Certs Begin */\n\n " ;
2253+
2254+ # convert and print SM2 DER format certs/keys
2255+ for (my $i = 0; $i < $num_sm2_der ; $i ++) {
2256+
2257+ my $fname = $fileList_sm2_der [$i ][0];
2258+ my $sname = $fileList_sm2_der [$i ][1];
2259+
2260+ print OUT_FILE_SM " /* $fname */\n " ;
2261+ print OUT_FILE_SM " static const unsigned char $sname \[ ] =\n " ;
2262+ print OUT_FILE_SM " {\n " ;
2263+ file_to_hex($fname , \*OUT_FILE_SM);
2264+ print OUT_FILE_SM " };\n " ;
2265+ # In C89/C90 (which Watcom generally defaults to), sizeof must be a
2266+ # compile-time constant expression when used in a static initializer.
2267+ # So don't use `static const int sizeof_` here:
2268+ print OUT_FILE_SM " #define sizeof_$sname (sizeof($sname ))\n\n " ;
2269+ }
2270+ print OUT_FILE_SM " /* DER Certs End */\n\n " ;
2271+
2272+
2273+ # convert and print SM2 PEM format certs/keys
2274+ print OUT_FILE_SM " #ifdef WOLFSSL_NO_PEM\n\n " ;
2275+ print OUT_FILE_SM " /* SM PEM Certs disabled */\n\n " ;
2276+ print OUT_FILE_SM " #else\n\n " ;
2277+
2278+ for (my $i = 0; $i < $num_sm2 ; $i ++) {
2279+
2280+ my $fname = $fileList_sm2 [$i ][0];
2281+ my $sname = $fileList_sm2 [$i ][1];
2282+
2283+ print OUT_FILE_SM " /* $fname */\n " ;
2284+ print OUT_FILE_SM " static const unsigned char $sname \[ ] =\n " ;
2285+ print OUT_FILE_SM " {\n " ;
2286+ file_to_hex($fname , \*OUT_FILE_SM);
2287+ print OUT_FILE_SM " };\n " ;
2288+ # In C89/C90 (which Watcom generally defaults to), sizeof must be a
2289+ # compile-time constant expression when used in a static initializer.
2290+ # So don't use `static const int sizeof_` here:
2291+ print OUT_FILE_SM " #define sizeof_$sname (sizeof($sname ))\n\n " ;
2292+ }
2293+
2294+ print OUT_FILE_SM " #endif /* WOLFSSL_NO_PEM */\n\n " ;
2295+ print OUT_FILE_SM " #endif /* WOLFSSL_SM2 || WOLFSSL_SM3 || WOLFSSL_SM4 */\n " ;
2296+ print OUT_FILE_SM " #endif /* WOLFSSL_CERTS_TEST_SM_H */\n " ;
2297+
2298+ # close certs_test_sm.h file
2299+ close OUT_FILE_SM or die $! ;
2300+
22052301# print file as hex, comma-separated, as needed by C buffer
22062302sub file_to_hex {
2207- my $fileName = $_ [0];
2303+ my ($fileName , $out_fh ) = @_ ;
2304+ $out_fh //= \*OUT_FILE; # default handle
22082305
22092306 open my $fp , " <" , $fileName or die $! ;
22102307 binmode ($fp );
@@ -2215,26 +2312,27 @@ sub file_to_hex {
22152312 for (my $i = 0, my $j = 1; $i < $fileLen ; $i ++, $j ++)
22162313 {
22172314 if ($j == 1) {
2218- print OUT_FILE " " ;
2315+ print { $out_fh } " " ;
22192316 }
22202317 if ($j != 1) {
2221- print OUT_FILE " " ;
2318+ print { $out_fh } " " ;
22222319 }
22232320 read ($fp , $byte , 1) or die " Error reading $fileName " ;
22242321 my $output = sprintf (" 0x%02X" , ord ($byte ));
2225- print OUT_FILE $output ;
2322+ print { $out_fh } $output ;
22262323
22272324 if ($i != ($fileLen - 1)) {
2228- print OUT_FILE " ," ;
2325+ print { $out_fh } " ," ;
22292326 }
22302327
22312328 if ($j == 10) {
22322329 $j = 0;
2233- print OUT_FILE " \n " ;
2330+ print { $out_fh } " \n " ;
22342331 }
22352332 }
22362333
2237- print OUT_FILE " \n " ;
2334+ print { $out_fh } " \n " ;
22382335
22392336 close ($fp );
22402337}
2338+
0 commit comments