Fixes https://github.com/heimdal/heimdal/issues/294
[heimdal.git] / lib / hcrypto / test_pkcs12.c
blob3c7f5da131afd1eec307a8725336480fbcff526c
1 /*
2 * Copyright (c) 2006 Kungliga Tekniska Högskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
17 * 3. Neither the name of the Institute nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
34 #include <config.h>
35 #include <roken.h>
37 #include <pkcs12.h>
38 #include <evp.h>
40 struct tests {
41 int id;
42 const char *password;
43 void *salt;
44 size_t saltsize;
45 int iterations;
46 size_t keylen;
47 const EVP_MD * (*md)(void);
48 void *key;
51 struct tests p12_pbe_tests[] = {
52 { PKCS12_KEY_ID,
53 NULL,
54 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
55 16,
56 100,
57 16,
58 EVP_sha1,
59 "\xd7\x2d\xd4\xcf\x7e\xe1\x89\xc5\xb5\xe5\x31\xa7\x63\x2c\xf0\x4b"
61 { PKCS12_KEY_ID,
62 "",
63 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
64 16,
65 100,
66 16,
67 EVP_sha1,
68 "\x00\x54\x91\xaf\xc0\x6a\x76\xc3\xf9\xb6\xf2\x28\x1a\x15\xd9\xfe"
70 { PKCS12_KEY_ID,
71 "foobar",
72 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
73 16,
74 100,
75 16,
76 EVP_sha1,
77 "\x79\x95\xbf\x3f\x1c\x6d\xe\xe8\xd3\x71\xc4\x94\xd\xb\x18\xb5"
79 { PKCS12_KEY_ID,
80 "foobar",
81 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
82 16,
83 2048,
84 24,
85 EVP_sha1,
86 "\x0b\xb5\xe\xa6\x71\x0d\x0c\xf7\x44\xe\xe1\x9b\xb5\xdf\xf1\xdc\x4f\xb0\xca\xe\xee\x4f\xb9\xfd"
88 { PKCS12_IV_ID,
89 "foobar",
90 "\x3c\xdf\x84\x32\x59\xd3\xda\x69",
92 2048,
94 EVP_sha1,
95 "\xbf\x9a\x12\xb7\x26\x69\xfd\x05"
100 static int
101 test_pkcs12_pbe(struct tests *t)
103 void *key;
104 size_t pwlen = 0;
106 key = malloc(t->keylen);
107 if (t->password)
108 pwlen = strlen(t->password);
110 if (!PKCS12_key_gen(t->password, pwlen,
111 t->salt, t->saltsize,
112 t->id, t->iterations, t->keylen,
113 key, t->md()))
115 printf("key_gen failed\n");
116 return 1;
119 if (memcmp(t->key, key, t->keylen) != 0) {
120 printf("incorrect key\n");
121 free(key);
122 return 1;
124 free(key);
125 return 0;
129 main(int argc, char **argv)
131 int ret = 0;
132 int i;
134 for (i = 0; i < sizeof(p12_pbe_tests)/sizeof(p12_pbe_tests[0]); i++)
135 ret += test_pkcs12_pbe(&p12_pbe_tests[i]);
137 return ret;