]>
git.ipfire.org Git - thirdparty/strongswan.git/blob - programs/charon/testing/encryption_payload_test.c
2 * @file encryption_payload_test.c
4 * @brief Tests for the encryption_payload_t class.
9 * Copyright (C) 2005 Jan Hutter, Martin Willi
10 * Hochschule fuer Technik Rapperswil
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the
14 * Free Software Foundation; either version 2 of the License, or (at your
15 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
19 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
25 #include "encryption_payload_test.h"
28 #include <utils/logger_manager.h>
29 #include <encoding/generator.h>
30 #include <encoding/parser.h>
31 #include <encoding/payloads/encryption_payload.h>
32 #include <encoding/payloads/nonce_payload.h>
33 #include <crypto/crypters/crypter.h>
34 #include <crypto/signers/signer.h>
37 * described in Header-File
39 void test_encryption_payload(protected_tester_t
*tester
)
41 encryption_payload_t
*encryption_payload
;
42 nonce_payload_t
*nonce_payload
;
45 chunk_t nonce
, got_nonce
;
48 generator_t
*generator
;
55 u_int8_t key_bytes
[] = {
62 key
.len
= sizeof(key_bytes
);
64 logger
= logger_manager
->get_logger(logger_manager
, TESTER
);
66 nonce
.ptr
= "test text und so...";
67 nonce
.len
= strlen(nonce
.ptr
) + 1;
69 logger
->log_chunk(logger
, RAW
, "nonce", nonce
);
71 encryption_payload
= encryption_payload_create();
72 nonce_payload
= nonce_payload_create();
73 nonce_payload
->set_nonce(nonce_payload
, nonce
);
75 encryption_payload
->add_payload(encryption_payload
, (payload_t
*)nonce_payload
);
76 signer
= signer_create(AUTH_HMAC_SHA1_96
);
77 crypter
= crypter_create(ENCR_AES_CBC
, 16);
79 signer
->set_key(signer
, key
);
80 crypter
->set_key(crypter
, key
);
86 encryption_payload
->set_transforms(encryption_payload
, crypter
, signer
);
88 logger
->log(logger
, RAW
, "encrypt");
89 status
= encryption_payload
->encrypt(encryption_payload
);
90 tester
->assert_true(tester
, (status
== SUCCESS
), "encryption");
92 generator
= generator_create();
93 generator
->generate_payload(generator
, (payload_t
*)encryption_payload
);
95 generator
->write_to_chunk(generator
, &data
);
96 logger
->log_chunk(logger
, RAW
, "generated data", data
);
98 encryption_payload
->build_signature(encryption_payload
, data
);
99 logger
->log_chunk(logger
, RAW
, "generated data", data
);
101 encryption_payload
->destroy(encryption_payload
);
106 parser
= parser_create(data
);
107 status
= parser
->parse_payload(parser
, ENCRYPTED
, (payload_t
**)&encryption_payload
);
108 tester
->assert_true(tester
, (status
== SUCCESS
), "parsing");
110 encryption_payload
->set_transforms(encryption_payload
, crypter
, signer
);
111 status
= encryption_payload
->verify_signature(encryption_payload
, data
);
112 tester
->assert_true(tester
, (status
== SUCCESS
), "signature verification");
114 status
= encryption_payload
->decrypt(encryption_payload
);
115 tester
->assert_true(tester
, (status
== SUCCESS
), "decryption");
118 iterator
= encryption_payload
->create_payload_iterator(encryption_payload
, TRUE
);
119 while (iterator
->has_next(iterator
))
121 iterator
->current(iterator
, (void**)&nonce_payload
);
122 got_nonce
= nonce_payload
->get_nonce(nonce_payload
);
124 iterator
->destroy(iterator
);
127 tester
->assert_true(tester
, (got_nonce
.len
== nonce
.len
), "decrypted nonce");
128 tester
->assert_false(tester
, memcmp(nonce
.ptr
, got_nonce
.ptr
, nonce
.len
), "decrypted nonce");
130 logger
->log_chunk(logger
, RAW
, "nonce", got_nonce
);
134 encryption_payload
->destroy(encryption_payload
);
135 crypter
->destroy(crypter
);
136 signer
->destroy(signer
);
137 generator
->destroy(generator
);
138 parser
->destroy(parser
);