@@ -100,13 +100,43 @@ static const unsigned char openssl_pub_dsa[] = {
100100 0xeb , 0x6d , 0x41 , 0x27 , 0xd7 , 0x0d , 0x74 , 0xaf , 0xa0 , 0x35
101101};
102102
103+ static unsigned char dsaparam_der [] = {
104+ 0x30 , 0x82 , 0x01 , 0x1e , 0x02 , 0x81 , 0x81 , 0x00 , 0xc5 , 0x0a , 0x37 , 0x51 ,
105+ 0x5c , 0xab , 0xd6 , 0x18 , 0xd5 , 0xa2 , 0x70 , 0xbd , 0x4a , 0x6f , 0x6b , 0x4a ,
106+ 0xf9 , 0xe1 , 0x39 , 0x95 , 0x0f , 0x2b , 0x99 , 0x38 , 0x7d , 0x9a , 0x64 , 0xd6 ,
107+ 0x4c , 0xb5 , 0x96 , 0x7a , 0xdc , 0xed , 0xac , 0xa8 , 0xac , 0xc6 , 0x1b , 0x65 ,
108+ 0x5a , 0xde , 0xdb , 0x00 , 0x61 , 0x25 , 0x1a , 0x18 , 0x2c , 0xee , 0xa1 , 0x07 ,
109+ 0x90 , 0x62 , 0x5e , 0x4d , 0x12 , 0x31 , 0x90 , 0xc7 , 0x03 , 0x21 , 0xfa , 0x09 ,
110+ 0xe7 , 0xb1 , 0x73 , 0xd7 , 0x8e , 0xaf , 0xdb , 0xfd , 0xbf , 0xb3 , 0xef , 0xad ,
111+ 0xd1 , 0xa1 , 0x2a , 0x03 , 0x6d , 0xe7 , 0x06 , 0x92 , 0x4a , 0x85 , 0x2a , 0xff ,
112+ 0x7a , 0x01 , 0x66 , 0x53 , 0x1f , 0xea , 0xc6 , 0x67 , 0x41 , 0x84 , 0x5a , 0xc0 ,
113+ 0x6c , 0xed , 0x62 , 0xf9 , 0xc2 , 0x62 , 0x62 , 0x05 , 0xa4 , 0xfa , 0x48 , 0xa0 ,
114+ 0x66 , 0xec , 0x35 , 0xc9 , 0xa8 , 0x11 , 0xfe , 0xb9 , 0x81 , 0xab , 0xee , 0xbe ,
115+ 0x31 , 0xb6 , 0xbf , 0xcf , 0x02 , 0x15 , 0x00 , 0xaa , 0x5b , 0xd7 , 0xf4 , 0xe5 ,
116+ 0x06 , 0x24 , 0x13 , 0xe5 , 0x88 , 0x35 , 0xca , 0x00 , 0xc7 , 0xa6 , 0x35 , 0x71 ,
117+ 0x61 , 0x94 , 0xc5 , 0x02 , 0x81 , 0x80 , 0x3b , 0x92 , 0xe4 , 0xff , 0x59 , 0x29 ,
118+ 0x15 , 0x0b , 0x08 , 0x99 , 0x5a , 0x7b , 0xf2 , 0xad , 0x14 , 0x40 , 0x55 , 0x6f ,
119+ 0xa0 , 0x47 , 0xff , 0x90 , 0x99 , 0xb3 , 0x44 , 0xb3 , 0xd4 , 0xfc , 0x45 , 0x15 ,
120+ 0x05 , 0xae , 0x67 , 0x22 , 0x43 , 0x9c , 0xba , 0x37 , 0x10 , 0xa5 , 0x89 , 0x47 ,
121+ 0x37 , 0xec , 0xcc , 0xf5 , 0xae , 0xad , 0xa8 , 0xb4 , 0x7a , 0x35 , 0xcb , 0x9d ,
122+ 0x93 , 0x5c , 0xed , 0xe6 , 0xb0 , 0x7e , 0x96 , 0x94 , 0xc4 , 0xa6 , 0x0c , 0x7d ,
123+ 0xd6 , 0x70 , 0x8a , 0x09 , 0x4f , 0x81 , 0x4a , 0x0e , 0xc2 , 0x13 , 0xfb , 0xeb ,
124+ 0x16 , 0xbf , 0xea , 0xa4 , 0xf4 , 0x56 , 0xff , 0x72 , 0x30 , 0x05 , 0xde , 0x8a ,
125+ 0x44 , 0x3f , 0xbe , 0xc6 , 0x85 , 0x26 , 0x55 , 0xd6 , 0x2d , 0x1d , 0x1e , 0xdb ,
126+ 0x15 , 0xda , 0xa4 , 0x45 , 0x83 , 0x3c , 0x17 , 0x97 , 0x98 , 0x0b , 0x8d , 0x87 ,
127+ 0xf3 , 0x49 , 0x0d , 0x90 , 0xbd , 0xa9 , 0xab , 0x67 , 0x6e , 0x87 , 0x68 , 0x72 ,
128+ 0x23 , 0xdc
129+ };
130+
131+
103132static int _dsa_compat_test (void )
104133{
105134 dsa_key key = LTC_DSA_KEY_INITIALIZER ;
106135 unsigned char tmp [1024 ], buf [1024 ];
107136 unsigned long x , len ;
108137 unsigned char key_parts [5 ][256 ];
109138 unsigned long key_lens [5 ];
139+ int stat ;
110140
111141 DO (dsa_import (openssl_priv_dsa , sizeof (openssl_priv_dsa ), & key ));
112142
@@ -176,6 +206,43 @@ static int _dsa_compat_test(void)
176206 }
177207 dsa_free (& key );
178208
209+ /* try import dsaparam */
210+ DO (dsa_set_pqg_dsaparam (dsaparam_der , sizeof (dsaparam_der ), & key ));
211+ DO (dsa_make_key_ex (& yarrow_prng , find_prng ("yarrow" ), & key ));
212+ /* verify it */
213+ DO (dsa_verify_key (& key , & stat ));
214+ if (stat == 0 ) {
215+ fprintf (stderr , "dsa_verify_key after dsa_set_pqg_dsaparam()" );
216+ return CRYPT_FAIL_TESTVECTOR ;
217+ }
218+ dsa_free (& key );
219+
220+ /* try import dsaparam - our public key */
221+ DO (dsa_set_pqg_dsaparam (dsaparam_der , sizeof (dsaparam_der ), & key ));
222+ DO (dsa_set_key (key_parts [3 ], key_lens [3 ],
223+ NULL , 0 ,
224+ & key ));
225+ len = sizeof (buf );
226+ DO (dsa_export (buf , & len , PK_PUBLIC | PK_STD , & key ));
227+ if (compare_testvector (buf , len , openssl_pub_dsa , sizeof (openssl_pub_dsa ),
228+ "DSA public export failed from dsa_set_pqg_dsaparam()\n" , 0 )) {
229+ return CRYPT_FAIL_TESTVECTOR ;
230+ }
231+ dsa_free (& key );
232+
233+ /* try import dsaparam - our private key */
234+ DO (dsa_set_pqg_dsaparam (dsaparam_der , sizeof (dsaparam_der ), & key ));
235+ DO (dsa_set_key (key_parts [3 ], key_lens [3 ],
236+ key_parts [4 ], key_lens [4 ],
237+ & key ));
238+ len = sizeof (buf );
239+ DO (dsa_export (buf , & len , PK_PRIVATE | PK_STD , & key ));
240+ if (compare_testvector (buf , len , openssl_priv_dsa , sizeof (openssl_priv_dsa ),
241+ "DSA private export failed from dsa_set_pqg_dsaparam()\n" , 0 )) {
242+ return CRYPT_FAIL_TESTVECTOR ;
243+ }
244+ dsa_free (& key );
245+
179246 return CRYPT_OK ;
180247}
181248
0 commit comments