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-cert.der" , " server_sm2_cert_der" ],
145+ [ " ./certs/sm2/server-sm2-key.der" , " server_sm2_key_der" ],
146+ [ " ./certs/sm2/server-sm2-priv.der" , " server_sm2_priv_der" ],
147+ );
148+
112149# Falcon Post-Quantum Keys
113150# Used with HAVE_PQC
114151my @fileList_falcon = (
130167
131168# ----------------------------------------------------------------------------
132169
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 ;
170+ my $num_ecc = @fileList_ecc ;
171+ my $num_ed = @fileList_ed ;
172+ my $num_x = @fileList_x ;
173+ my $num_1024 = @fileList_1024 ;
174+ my $num_2048 = @fileList_2048 ;
175+ my $num_3072 = @fileList_3072 ;
176+ my $num_4096 = @fileList_4096 ;
177+ my $num_sm2 = @fileList_sm2 ;
178+ my $num_sm2_der = @fileList_sm2_der ;
179+ my $num_falcon = @fileList_falcon ;
180+ my $num_sphincs = @fileList_sphincs ;
142181
143182# open our output file, "+>" creates and/or truncates
144183open OUT_FILE, " +>" , $outputFile or die $! ;
22022241# close certs_test.h file
22032242close OUT_FILE or die $! ;
22042243
2244+ # ---------------------------------------------------------------------------
2245+ # open our output file, "+>" creates and/or truncates
2246+ open OUT_FILE_SM, " +>" , $outputFileSM or die $! ;
2247+
2248+ print OUT_FILE_SM " /* certs_test_sm.h */\n " ;
2249+ print OUT_FILE_SM " /* This file was generated using: ./gencertbuf.pl */\n\n " ;
2250+ print OUT_FILE_SM " #ifndef WOLFSSL_CERTS_TEST_SM_H\n " ;
2251+ print OUT_FILE_SM " #define WOLFSSL_CERTS_TEST_SM_H\n\n " ;
2252+ print OUT_FILE_SM " #if defined(WOLFSSL_SM2) || defined(WOLFSSL_SM3) || defined(WOLFSSL_SM4)\n\n " ;
2253+ print OUT_FILE_SM " /* DER Certs Begin */\n\n " ;
2254+
2255+ # convert and print SM2 DER format certs/keys
2256+ for (my $i = 0; $i < $num_sm2_der ; $i ++) {
2257+
2258+ my $fname = $fileList_sm2_der [$i ][0];
2259+ my $sname = $fileList_sm2_der [$i ][1];
2260+
2261+ print OUT_FILE_SM " /* $fname */\n " ;
2262+ print OUT_FILE_SM " static const unsigned char $sname \[ ] =\n " ;
2263+ print OUT_FILE_SM " {\n " ;
2264+ file_to_hex($fname , \*OUT_FILE_SM);
2265+ print OUT_FILE_SM " };\n " ;
2266+ # In C89/C90 (which Watcom generally defaults to), sizeof must be a
2267+ # compile-time constant expression when used in a static initializer.
2268+ # So don't use `static const int sizeof_` here:
2269+ print OUT_FILE_SM " #define sizeof_$sname (sizeof($sname ))\n\n " ;
2270+ }
2271+ print OUT_FILE_SM " /* DER Certs End */\n\n " ;
2272+
2273+
2274+ # convert and print SM2 PEM format certs/keys
2275+ print OUT_FILE_SM " #ifdef WOLFSSL_NO_PEM\n\n " ;
2276+ print OUT_FILE_SM " /* SM PEM Certs disabled */\n\n " ;
2277+ print OUT_FILE_SM " #else\n\n " ;
2278+
2279+ for (my $i = 0; $i < $num_sm2 ; $i ++) {
2280+
2281+ my $fname = $fileList_sm2 [$i ][0];
2282+ my $sname = $fileList_sm2 [$i ][1];
2283+
2284+ print OUT_FILE_SM " /* $fname */\n " ;
2285+ print OUT_FILE_SM " static const unsigned char $sname \[ ] =\n " ;
2286+ print OUT_FILE_SM " {\n " ;
2287+ file_to_hex($fname , \*OUT_FILE_SM);
2288+ print OUT_FILE_SM " };\n " ;
2289+ # In C89/C90 (which Watcom generally defaults to), sizeof must be a
2290+ # compile-time constant expression when used in a static initializer.
2291+ # So don't use `static const int sizeof_` here:
2292+ print OUT_FILE_SM " #define sizeof_$sname (sizeof($sname ))\n\n " ;
2293+ }
2294+
2295+ print OUT_FILE_SM " #endif /* WOLFSSL_NO_PEM */\n\n " ;
2296+ print OUT_FILE_SM " #endif /* WOLFSSL_SM2 || WOLFSSL_SM3 || WOLFSSL_SM4 */\n " ;
2297+ print OUT_FILE_SM " #endif /* WOLFSSL_CERTS_TEST_SM_H */\n " ;
2298+
2299+ # close certs_test_sm.h file
2300+ close OUT_FILE_SM or die $! ;
2301+
22052302# print file as hex, comma-separated, as needed by C buffer
22062303sub file_to_hex {
2207- my $fileName = $_ [0];
2304+ my ($fileName , $out_fh ) = @_ ;
2305+ $out_fh //= \*OUT_FILE; # default handle
22082306
22092307 open my $fp , " <" , $fileName or die $! ;
22102308 binmode ($fp );
@@ -2215,26 +2313,27 @@ sub file_to_hex {
22152313 for (my $i = 0, my $j = 1; $i < $fileLen ; $i ++, $j ++)
22162314 {
22172315 if ($j == 1) {
2218- print OUT_FILE " " ;
2316+ print { $out_fh } " " ;
22192317 }
22202318 if ($j != 1) {
2221- print OUT_FILE " " ;
2319+ print { $out_fh } " " ;
22222320 }
22232321 read ($fp , $byte , 1) or die " Error reading $fileName " ;
22242322 my $output = sprintf (" 0x%02X" , ord ($byte ));
2225- print OUT_FILE $output ;
2323+ print { $out_fh } $output ;
22262324
22272325 if ($i != ($fileLen - 1)) {
2228- print OUT_FILE " ," ;
2326+ print { $out_fh } " ," ;
22292327 }
22302328
22312329 if ($j == 10) {
22322330 $j = 0;
2233- print OUT_FILE " \n " ;
2331+ print { $out_fh } " \n " ;
22342332 }
22352333 }
22362334
2237- print OUT_FILE " \n " ;
2335+ print { $out_fh } " \n " ;
22382336
22392337 close ($fp );
22402338}
2339+
0 commit comments