1 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
3 * LibTomCrypt is a library that provides various cryptographic
4 * algorithms in a highly modular and flexible manner.
6 * The library is free for all purposes without any express
13 PKCS #5 support, self-test, Steffen Jaeckel
21 Internet Engineering Task Force (IETF) S. Josefsson
22 Request for Comments: 6070 SJD AB
23 Category: Informational January 2011
29 @return CRYPT_OK if successful, CRYPT_NOP if tests have been disabled.
31 int pkcs_5_test (void)
47 static const case_item cases_5_2[] = {
55 { 0x0c, 0x60, 0xc8, 0x0f, 0x96, 0x1f, 0x0e, 0x71,
56 0xf3, 0xa9, 0xb5, 0x24, 0xaf, 0x60, 0x12, 0x06,
57 0x2f, 0xe0, 0x37, 0xa6 }
66 { 0xea, 0x6c, 0x01, 0x4d, 0xc7, 0x2d, 0x6f, 0x8c,
67 0xcd, 0x1e, 0xd9, 0x2a, 0xce, 0x1d, 0x41, 0xf0,
68 0xd8, 0xde, 0x89, 0x57 }
78 { 0x4b, 0x00, 0x79, 0x01, 0xb7, 0x65, 0x48, 0x9a,
79 0xbe, 0xad, 0x49, 0xd9, 0x26, 0xf7, 0x21, 0xd0,
80 0x65, 0xa4, 0x29, 0xc1 }
89 { 0xee, 0xfe, 0x3d, 0x61, 0xcd, 0x4d, 0xa4, 0xe4,
90 0xe9, 0x94, 0x5b, 0x3d, 0x6b, 0xa2, 0x15, 0x8c,
91 0x26, 0x34, 0xe9, 0x84 }
94 "passwordPASSWORDpassword",
96 "saltSALTsaltSALTsaltSALTsaltSALTsalt",
100 { 0x3d, 0x2e, 0xec, 0x4f, 0xe4, 0x1c, 0x84, 0x9b,
101 0x80, 0xc8, 0xd8, 0x36, 0x62, 0xc0, 0xe4, 0x4a,
102 0x8b, 0x29, 0x1a, 0x96, 0x4c, 0xf2, 0xf0, 0x70,
112 { 0x56, 0xfa, 0x6a, 0xa7, 0x55, 0x48, 0x09, 0x9d,
113 0xcc, 0x37, 0xd7, 0xf0, 0x34, 0x25, 0xe0, 0xc3 }
115 #endif /* LTC_TEST_EXT */
118 static const case_item cases_5_1[] = {
122 "saltsalt", /* must be 8 octects */
123 8, /* ignored by alg1 */
126 { 0xca, 0xb8, 0x6d, 0xd6, 0x26, 0x17, 0x10, 0x89, 0x1e, 0x8c,
127 0xb5, 0x6e, 0xe3, 0x62, 0x56, 0x91, 0xa7, 0x5d, 0xf3, 0x44 }
131 static const case_item cases_5_1o[] = {
135 "saltsalt", /* must be 8 octects */
136 8, /* ignored by alg1_openssl */
139 { 0xca, 0xb8, 0x6d, 0xd6, 0x26, 0x17, 0x10, 0x89, 0x1e, 0x8c,
140 0xb5, 0x6e, 0xe3, 0x62, 0x56, 0x91, 0xa7, 0x5d, 0xf3, 0x44 }
146 "saltsalt", /* must be 8 octects */
147 8, /* ignored by alg1_openssl */
150 { 0xca, 0xb8, 0x6d, 0xd6, 0x26, 0x17, 0x10, 0x89, 0x1e, 0x8c,
151 0xb5, 0x6e, 0xe3, 0x62, 0x56, 0x91, 0xa7, 0x5d, 0xf3, 0x44,
152 0xf0, 0xbf, 0xf4, 0xc1, 0x2c, 0xf3, 0x59, 0x6f, 0xc0, 0x0b }
157 unsigned char DK[40];
160 int tested=0, failed=0;
161 int hash = find_hash("sha1");
165 printf("PKCS#5 test failed: 'sha1' hash not found\n");
171 for(i=0; i < (int)(sizeof(cases_5_2) / sizeof(cases_5_2[0])); i++) {
173 dkLen = cases_5_2[i].dkLen;
174 if((err = pkcs_5_alg2((unsigned char*)cases_5_2[i].P, cases_5_2[i].P_len,
175 (unsigned char*)cases_5_2[i].S, cases_5_2[i].S_len,
176 cases_5_2[i].c, hash,
177 DK, &dkLen)) != CRYPT_OK) {
179 printf("\npkcs_5_alg2() #%d: Failed/1 (%s)\n", i, error_to_string(err));
183 else if (compare_testvector(DK, dkLen, cases_5_2[i].DK, cases_5_2[i].dkLen, "PKCS#5_2", i)) {
189 for(i=0; i < (int)(sizeof(cases_5_1) / sizeof(case_item)); i++, tested++) {
190 dkLen = cases_5_1[i].dkLen;
191 if((err = pkcs_5_alg1((unsigned char*)cases_5_1[i].P, cases_5_1[i].P_len,
192 (unsigned char*)cases_5_1[i].S,
193 cases_5_1[i].c, hash,
194 DK, &dkLen)) != CRYPT_OK) {
196 printf("\npkcs_5_alg1() #%d: Failed/1 (%s)\n", i, error_to_string(err));
200 else if (compare_testvector(DK, dkLen, cases_5_1[i].DK, cases_5_1[i].dkLen, "PKCS#5_1", i)) {
205 /* testing alg 1_openssl */
206 for(i = 0; i < (int)(sizeof(cases_5_1o) / sizeof(cases_5_1o[0])); i++, tested++) {
207 dkLen = cases_5_1o[i].dkLen;
208 if ((err = pkcs_5_alg1_openssl((unsigned char*)cases_5_1o[i].P, cases_5_1o[i].P_len,
209 (unsigned char*)cases_5_1o[i].S,
210 cases_5_1o[i].c, hash,
211 DK, &dkLen)) != CRYPT_OK) {
213 printf("\npkcs_5_alg1_openssl() #%d: Failed/1 (%s)\n", i, error_to_string(err));
217 else if (compare_testvector(DK, dkLen, cases_5_1o[i].DK, cases_5_1o[i].dkLen, "PKCS#5_1o", i)) {
222 return (failed != 0) ? CRYPT_FAIL_TESTVECTOR : CRYPT_OK;
229 /* ref: $Format:%D$ */
230 /* git commit: $Format:%H$ */
231 /* commit time: $Format:%ai$ */