Annotation of embedaddon/strongswan/src/libstrongswan/tests/suites/test_auth_cfg.c, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2016 Tobias Brunner
3: * HSR Hochschule fuer Technik Rapperswil
4: *
5: * This program is free software; you can redistribute it and/or modify it
6: * under the terms of the GNU General Public License as published by the
7: * Free Software Foundation; either version 2 of the License, or (at your
8: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
9: *
10: * This program is distributed in the hope that it will be useful, but
11: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13: * for more details.
14: */
15:
16: #include "test_suite.h"
17:
18: #include <credentials/auth_cfg.h>
19:
20: struct {
21: char *constraints;
22: signature_scheme_t sig[5];
23: signature_scheme_t ike[5];
24: } sig_constraints_tests[] = {
25: { "rsa-sha256", { SIGN_RSA_EMSA_PKCS1_SHA2_256, 0 }, {0}},
26: { "rsa-sha256-sha512", { SIGN_RSA_EMSA_PKCS1_SHA2_256, SIGN_RSA_EMSA_PKCS1_SHA2_512, 0 }, {0}},
27: { "ecdsa-sha256", { SIGN_ECDSA_WITH_SHA256_DER, SIGN_ECDSA_256, 0 }, {0}},
28: { "rsa-sha256-ecdsa-sha256", { SIGN_RSA_EMSA_PKCS1_SHA2_256, SIGN_ECDSA_WITH_SHA256_DER, SIGN_ECDSA_256, 0 }, {0}},
29: { "pubkey-sha256", { SIGN_RSA_EMSA_PKCS1_SHA2_256, SIGN_ECDSA_WITH_SHA256_DER, SIGN_ECDSA_256, SIGN_BLISS_WITH_SHA2_256, 0 }, {0}},
30: { "ike:rsa-sha256", {0}, { SIGN_RSA_EMSA_PKCS1_SHA2_256, 0 }},
31: { "ike:rsa-sha256-rsa-sha256", { SIGN_RSA_EMSA_PKCS1_SHA2_256, 0 }, { SIGN_RSA_EMSA_PKCS1_SHA2_256, 0 }},
32: { "rsa-sha256-ike:rsa-sha256", { SIGN_RSA_EMSA_PKCS1_SHA2_256, 0 }, { SIGN_RSA_EMSA_PKCS1_SHA2_256, 0 }},
33: { "ike:pubkey-sha256", {0}, { SIGN_RSA_EMSA_PKCS1_SHA2_256, SIGN_ECDSA_WITH_SHA256_DER, SIGN_ECDSA_256, SIGN_BLISS_WITH_SHA2_256, 0 }},
34: { "rsa-ecdsa-sha256", { SIGN_ECDSA_WITH_SHA256_DER, SIGN_ECDSA_256, 0 }, {0}},
35: { "rsa-4096-ecdsa-sha256", { SIGN_ECDSA_WITH_SHA256_DER, SIGN_ECDSA_256, 0 }, {0}},
36: { "rsa-4096-ecdsa-256-sha256", { SIGN_ECDSA_WITH_SHA256_DER, SIGN_ECDSA_256, 0 }, {0}},
37: { "rsa-ecdsa256-sha256", { SIGN_RSA_EMSA_PKCS1_SHA2_256, 0 }, {0}},
38: { "rsa4096-sha256", {0}, {0}},
39: { "sha256", {0}, {0}},
40: { "ike:sha256", {0}, {0}},
41: };
42:
43: static void check_sig_constraints(auth_cfg_t *cfg, auth_rule_t type,
44: signature_scheme_t expected[])
45: {
46: enumerator_t *enumerator;
47: auth_rule_t t;
48: signature_params_t *value;
49: int i = 0;
50:
51: enumerator = cfg->create_enumerator(cfg);
52: while (enumerator->enumerate(enumerator, &t, &value))
53: {
54: if (t == type)
55: {
56: ck_assert(expected[i]);
57: ck_assert_int_eq(expected[i], value->scheme);
58: i++;
59: }
60: }
61: enumerator->destroy(enumerator);
62: ck_assert(!expected[i]);
63: }
64:
65: START_TEST(test_sig_constraints)
66: {
67: auth_cfg_t *cfg;
68: signature_scheme_t none[] = {0};
69:
70: cfg = auth_cfg_create();
71: cfg->add_pubkey_constraints(cfg, sig_constraints_tests[_i].constraints, FALSE);
72: check_sig_constraints(cfg, AUTH_RULE_SIGNATURE_SCHEME, sig_constraints_tests[_i].sig);
73: check_sig_constraints(cfg, AUTH_RULE_IKE_SIGNATURE_SCHEME, none);
74: cfg->destroy(cfg);
75:
76: lib->settings->set_bool(lib->settings, "%s.signature_authentication_constraints",
77: FALSE, lib->ns);
78:
79: cfg = auth_cfg_create();
80: cfg->add_pubkey_constraints(cfg, sig_constraints_tests[_i].constraints, TRUE);
81: check_sig_constraints(cfg, AUTH_RULE_SIGNATURE_SCHEME, sig_constraints_tests[_i].sig);
82: check_sig_constraints(cfg, AUTH_RULE_IKE_SIGNATURE_SCHEME, sig_constraints_tests[_i].ike);
83: cfg->destroy(cfg);
84: }
85: END_TEST
86:
87: START_TEST(test_ike_constraints_fallback)
88: {
89: auth_cfg_t *cfg;
90:
91: lib->settings->set_bool(lib->settings, "%s.signature_authentication_constraints",
92: TRUE, lib->ns);
93:
94: cfg = auth_cfg_create();
95: cfg->add_pubkey_constraints(cfg, sig_constraints_tests[_i].constraints, TRUE);
96: check_sig_constraints(cfg, AUTH_RULE_SIGNATURE_SCHEME, sig_constraints_tests[_i].sig);
97: if (sig_constraints_tests[_i].ike[0])
98: {
99: check_sig_constraints(cfg, AUTH_RULE_IKE_SIGNATURE_SCHEME, sig_constraints_tests[_i].ike);
100: }
101: else
102: {
103: check_sig_constraints(cfg, AUTH_RULE_IKE_SIGNATURE_SCHEME, sig_constraints_tests[_i].sig);
104: }
105: cfg->destroy(cfg);
106: }
107: END_TEST
108:
109: typedef union {
110: rsa_pss_params_t pss;
111: } signature_param_types_t;
112:
113: struct {
114: char *constraints;
115: signature_scheme_t sig[5];
116: signature_param_types_t p[5];
117: } sig_constraints_params_tests[] = {
118: { "rsa/pss-sha256", { SIGN_RSA_EMSA_PSS, 0 }, {
119: { .pss = { .hash = HASH_SHA256, .mgf1_hash = HASH_SHA256, .salt_len = HASH_SIZE_SHA256, }}}},
120: { "rsa/pss-sha256-sha384", { SIGN_RSA_EMSA_PSS, SIGN_RSA_EMSA_PSS, 0 }, {
121: { .pss = { .hash = HASH_SHA256, .mgf1_hash = HASH_SHA256, .salt_len = HASH_SIZE_SHA256, }},
122: { .pss = { .hash = HASH_SHA384, .mgf1_hash = HASH_SHA384, .salt_len = HASH_SIZE_SHA384, }}}},
123: { "rsa/pss-sha256-rsa-sha256", { SIGN_RSA_EMSA_PSS, SIGN_RSA_EMSA_PKCS1_SHA2_256, 0 }, {
124: { .pss = { .hash = HASH_SHA256, .mgf1_hash = HASH_SHA256, .salt_len = HASH_SIZE_SHA256, }}}},
125: { "rsa-sha256-rsa/pss-sha256", { SIGN_RSA_EMSA_PKCS1_SHA2_256, SIGN_RSA_EMSA_PSS, 0 }, {
126: {},
127: { .pss = { .hash = HASH_SHA256, .mgf1_hash = HASH_SHA256, .salt_len = HASH_SIZE_SHA256, }}}},
128: { "rsa/pss", { 0 }, {}},
129: };
130:
131: static void check_sig_constraints_params(auth_cfg_t *cfg, auth_rule_t type,
132: signature_scheme_t scheme[],
133: signature_param_types_t p[])
134: {
135: enumerator_t *enumerator;
136: auth_rule_t t;
137: signature_params_t *value;
138: int i = 0;
139:
140: enumerator = cfg->create_enumerator(cfg);
141: while (enumerator->enumerate(enumerator, &t, &value))
142: {
143: if (t == type)
144: {
145: if (scheme[i] == SIGN_RSA_EMSA_PSS)
146: {
147: signature_params_t expected = {
148: .scheme = scheme[i],
149: .params = &p[i].pss,
150: };
151: ck_assert(signature_params_equal(value, &expected));
152: }
153: else
154: {
155: ck_assert(scheme[i]);
156: ck_assert(!value->params);
157: ck_assert_int_eq(scheme[i], value->scheme);
158: }
159: i++;
160: }
161: }
162: enumerator->destroy(enumerator);
163: ck_assert(!scheme[i]);
164: }
165:
166: START_TEST(test_sig_constraints_params)
167: {
168: auth_cfg_t *cfg;
169:
170: cfg = auth_cfg_create();
171: cfg->add_pubkey_constraints(cfg, sig_constraints_params_tests[_i].constraints, TRUE);
172: check_sig_constraints_params(cfg, AUTH_RULE_IKE_SIGNATURE_SCHEME,
173: sig_constraints_params_tests[_i].sig,
174: sig_constraints_params_tests[_i].p);
175: cfg->destroy(cfg);
176: }
177: END_TEST
178:
179: struct {
180: char *constraints;
181: signature_scheme_t sig[6];
182: signature_param_types_t p[6];
183: } sig_constraints_rsa_pss_tests[] = {
184: { "pubkey-sha256", { SIGN_RSA_EMSA_PSS, SIGN_RSA_EMSA_PKCS1_SHA2_256, SIGN_ECDSA_WITH_SHA256_DER, SIGN_ECDSA_256, SIGN_BLISS_WITH_SHA2_256, 0 }, {
185: { .pss = { .hash = HASH_SHA256, .mgf1_hash = HASH_SHA256, .salt_len = HASH_SIZE_SHA256, }}, {}, {}, {}, {}}},
186: { "rsa-sha256", { SIGN_RSA_EMSA_PSS, SIGN_RSA_EMSA_PKCS1_SHA2_256, 0 }, {
187: { .pss = { .hash = HASH_SHA256, .mgf1_hash = HASH_SHA256, .salt_len = HASH_SIZE_SHA256, }}, {}}},
188: };
189:
190: START_TEST(test_sig_constraints_rsa_pss)
191: {
192: auth_cfg_t *cfg;
193:
194: lib->settings->set_bool(lib->settings, "%s.rsa_pss", TRUE, lib->ns);
195:
196: cfg = auth_cfg_create();
197: cfg->add_pubkey_constraints(cfg, sig_constraints_rsa_pss_tests[_i].constraints, TRUE);
198: check_sig_constraints_params(cfg, AUTH_RULE_IKE_SIGNATURE_SCHEME,
199: sig_constraints_rsa_pss_tests[_i].sig,
200: sig_constraints_rsa_pss_tests[_i].p);
201: cfg->destroy(cfg);
202: }
203: END_TEST
204:
205: Suite *auth_cfg_suite_create()
206: {
207: Suite *s;
208: TCase *tc;
209:
210: s = suite_create("auth_cfg");
211:
212: tc = tcase_create("add_pubkey_constraints");
213: tcase_add_loop_test(tc, test_sig_constraints, 0, countof(sig_constraints_tests));
214: tcase_add_loop_test(tc, test_ike_constraints_fallback, 0, countof(sig_constraints_tests));
215: suite_add_tcase(s, tc);
216:
217: tc = tcase_create("add_pubkey_constraints parameters");
218: tcase_add_loop_test(tc, test_sig_constraints_params, 0, countof(sig_constraints_params_tests));
219: tcase_add_loop_test(tc, test_sig_constraints_rsa_pss, 0, countof(sig_constraints_rsa_pss_tests));
220: suite_add_tcase(s, tc);
221:
222: return s;
223: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>