1 /*- 2 * Copyright (c) 2008 Damien Bergamini <damien.bergamini@free.fr> 3 * 4 * Permission to use, copy, modify, and distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 */ 16 17 #include <string.h> 18 #include <stdio.h> 19 #include <crypto/rijndael.h> 20 #include <crypto/key_wrap.h> 21 22 void 23 ovbcopy(const void *src, void *dst, size_t len); 24 25 static void 26 print_hex(const char *str, unsigned char *buf, int len) 27 { 28 int i; 29 30 printf("%s", str); 31 for (i = 0; i < len; i++) { 32 if ((i % 8) == 0) 33 printf(" "); 34 printf("%02X", buf[i]); 35 } 36 printf("\n"); 37 } 38 39 void 40 ovbcopy(const void *src, void *dst, size_t len) 41 { 42 /* userspace does not have ovbcopy: fake it */ 43 memmove(dst, src, len); 44 } 45 46 static void 47 do_test(u_int kek_len, u_int data_len) 48 { 49 aes_key_wrap_ctx ctx; 50 u_int8_t kek[32], data[32]; 51 u_int8_t output[64]; 52 u_int i; 53 54 for (i = 0; i < kek_len; i++) 55 kek[i] = i; 56 printf("Input:\n"); 57 print_hex("KEK:\n ", kek, kek_len); 58 for (i = 0; i < 16; i++) 59 data[i] = i * 16 + i; 60 for (; i < data_len; i++) 61 data[i] = i - 16; 62 print_hex("Key Data:\n ", data, data_len); 63 aes_key_wrap_set_key(&ctx, kek, kek_len); 64 aes_key_wrap(&ctx, data, data_len / 8, output); 65 print_hex("Ciphertext:\n ", output, data_len + 8); 66 aes_key_unwrap(&ctx, output, output, data_len / 8); 67 printf("Output:\n"); 68 print_hex("Key Data:\n ", output, data_len); 69 printf("====\n"); 70 } 71 72 int 73 main(void) 74 { 75 do_test(16, 16); 76 do_test(24, 16); 77 do_test(32, 16); 78 do_test(24, 24); 79 do_test(32, 24); 80 do_test(32, 32); 81 82 return 0; 83 } 84 85 void 86 explicit_bzero(void *b, size_t len) 87 { 88 bzero(b, len); 89 } 90