Home | History | Annotate | Line # | Download | only in opencrypto
      1  1.1  hikaru /* $NetBSD: h_sha2hmac.c,v 1.1 2019/12/03 04:20:45 hikaru Exp $ */
      2  1.1  hikaru 
      3  1.1  hikaru /*-
      4  1.1  hikaru  * Copyright (c) 2014 The NetBSD Foundation, Inc.
      5  1.1  hikaru  * All rights reserved.
      6  1.1  hikaru  *
      7  1.1  hikaru  * Redistribution and use in source and binary forms, with or without
      8  1.1  hikaru  * modification, are permitted provided that the following conditions
      9  1.1  hikaru  * are met:
     10  1.1  hikaru  * 1. Redistributions of source code must retain the above copyright
     11  1.1  hikaru  *    notice, this list of conditions and the following disclaimer.
     12  1.1  hikaru  * 2. Redistributions in binary form must reproduce the above copyright
     13  1.1  hikaru  *    notice, this list of conditions and the following disclaimer in the
     14  1.1  hikaru  *    documentation and/or other materials provided with the distribution.
     15  1.1  hikaru  *
     16  1.1  hikaru  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     17  1.1  hikaru  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     18  1.1  hikaru  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     19  1.1  hikaru  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     20  1.1  hikaru  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     21  1.1  hikaru  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     22  1.1  hikaru  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     23  1.1  hikaru  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     24  1.1  hikaru  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     25  1.1  hikaru  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     26  1.1  hikaru  * POSSIBILITY OF SUCH DAMAGE.
     27  1.1  hikaru  */
     28  1.1  hikaru 
     29  1.1  hikaru #include <err.h>
     30  1.1  hikaru #include <fcntl.h>
     31  1.1  hikaru #include <stdio.h>
     32  1.1  hikaru #include <string.h>
     33  1.1  hikaru 
     34  1.1  hikaru #include <sys/ioctl.h>
     35  1.1  hikaru #include <sys/time.h>
     36  1.1  hikaru 
     37  1.1  hikaru #include <crypto/cryptodev.h>
     38  1.1  hikaru 
     39  1.1  hikaru /* Test data from RFC4868 */
     40  1.1  hikaru const struct {
     41  1.1  hikaru 	int num;
     42  1.1  hikaru 	int alg;
     43  1.1  hikaru 	size_t key_len;
     44  1.1  hikaru 	size_t len;
     45  1.1  hikaru 	size_t mac_len;
     46  1.1  hikaru 	unsigned char key[80];
     47  1.1  hikaru 	unsigned char data[80];
     48  1.1  hikaru 	unsigned char mac[80];
     49  1.1  hikaru } tests[] = {
     50  1.1  hikaru 	{ 1, CRYPTO_SHA2_256_HMAC, 32, 8, 16,
     51  1.1  hikaru 	  { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
     52  1.1  hikaru 	    0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
     53  1.1  hikaru 	    0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
     54  1.1  hikaru 	    0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b },
     55  1.1  hikaru 	  "Hi There",
     56  1.1  hikaru 	  { 0x19, 0x8a, 0x60, 0x7e, 0xb4, 0x4b, 0xfb, 0xc6,
     57  1.1  hikaru 	    0x99, 0x03, 0xa0, 0xf1, 0xcf, 0x2b, 0xbd, 0xc5 }
     58  1.1  hikaru 	},
     59  1.1  hikaru 	{ 2, CRYPTO_SHA2_256_HMAC, 32, 28, 16,
     60  1.1  hikaru 	  "JefeJefeJefeJefe"
     61  1.1  hikaru 	  "JefeJefeJefeJefe",
     62  1.1  hikaru 	  "what do ya want "
     63  1.1  hikaru 	  "for nothing?",
     64  1.1  hikaru 	  { 0x16, 0x7f, 0x92, 0x85, 0x88, 0xc5, 0xcc, 0x2e,
     65  1.1  hikaru 	    0xef, 0x8e, 0x30, 0x93, 0xca, 0xa0, 0xe8, 0x7c }
     66  1.1  hikaru 	},
     67  1.1  hikaru 	{ 3, CRYPTO_SHA2_256_HMAC, 32, 50, 16,
     68  1.1  hikaru 	  { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
     69  1.1  hikaru 	    0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
     70  1.1  hikaru 	    0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
     71  1.1  hikaru 	    0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa },
     72  1.1  hikaru 	  { 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
     73  1.1  hikaru 	    0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
     74  1.1  hikaru 	    0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
     75  1.1  hikaru 	    0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
     76  1.1  hikaru 	    0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
     77  1.1  hikaru 	    0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
     78  1.1  hikaru 	    0xdd, 0xdd },
     79  1.1  hikaru           { 0xcd, 0xcb, 0x12, 0x20, 0xd1, 0xec, 0xcc, 0xea,
     80  1.1  hikaru 	    0x91, 0xe5, 0x3a, 0xba, 0x30, 0x92, 0xf9, 0x62 }
     81  1.1  hikaru 	},
     82  1.1  hikaru 	{ 4, CRYPTO_SHA2_256_HMAC, 32, 50, 16,
     83  1.1  hikaru 	  { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
     84  1.1  hikaru 	    0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
     85  1.1  hikaru 	    0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
     86  1.1  hikaru 	    0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20 },
     87  1.1  hikaru 	  { 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
     88  1.1  hikaru 	    0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
     89  1.1  hikaru 	    0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
     90  1.1  hikaru 	    0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
     91  1.1  hikaru 	    0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
     92  1.1  hikaru 	    0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
     93  1.1  hikaru 	    0xcd, 0xcd },
     94  1.1  hikaru 	  { 0x37, 0x2e, 0xfc, 0xf9, 0xb4, 0x0b, 0x35, 0xc2,
     95  1.1  hikaru 	    0x11, 0x5b, 0x13, 0x46, 0x90, 0x3d, 0x2e, 0xf4 }
     96  1.1  hikaru 	},
     97  1.1  hikaru 	{ 5, CRYPTO_SHA2_384_HMAC, 48, 8, 24,
     98  1.1  hikaru 	  { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
     99  1.1  hikaru 	    0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
    100  1.1  hikaru 	    0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
    101  1.1  hikaru 	    0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
    102  1.1  hikaru 	    0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
    103  1.1  hikaru 	    0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b },
    104  1.1  hikaru 	  "Hi There",
    105  1.1  hikaru 	  { 0xb6, 0xa8, 0xd5, 0x63, 0x6f, 0x5c, 0x6a, 0x72,
    106  1.1  hikaru 	    0x24, 0xf9, 0x97, 0x7d, 0xcf, 0x7e, 0xe6, 0xc7,
    107  1.1  hikaru 	    0xfb, 0x6d, 0x0c, 0x48, 0xcb, 0xde, 0xe9, 0x73 }
    108  1.1  hikaru 	},
    109  1.1  hikaru 	{ 6, CRYPTO_SHA2_384_HMAC, 48, 28, 24,
    110  1.1  hikaru 	  "JefeJefeJefeJefe"
    111  1.1  hikaru 	  "JefeJefeJefeJefe"
    112  1.1  hikaru 	  "JefeJefeJefeJefe",
    113  1.1  hikaru 	  "what do ya want "
    114  1.1  hikaru 	  "for nothing?",
    115  1.1  hikaru 	  { 0x2c, 0x73, 0x53, 0x97, 0x4f, 0x18, 0x42, 0xfd,
    116  1.1  hikaru 	    0x66, 0xd5, 0x3c, 0x45, 0x2c, 0xa4, 0x21, 0x22,
    117  1.1  hikaru 	    0xb2, 0x8c, 0x0b, 0x59, 0x4c, 0xfb, 0x18, 0x4d }
    118  1.1  hikaru 	},
    119  1.1  hikaru 	{ 7, CRYPTO_SHA2_384_HMAC, 48, 50, 24,
    120  1.1  hikaru 	  { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
    121  1.1  hikaru 	    0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
    122  1.1  hikaru 	    0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
    123  1.1  hikaru 	    0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
    124  1.1  hikaru 	    0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
    125  1.1  hikaru 	    0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa },
    126  1.1  hikaru 	  { 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
    127  1.1  hikaru 	    0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
    128  1.1  hikaru 	    0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
    129  1.1  hikaru 	    0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
    130  1.1  hikaru 	    0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
    131  1.1  hikaru 	    0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
    132  1.1  hikaru 	    0xdd, 0xdd },
    133  1.1  hikaru 	  { 0x80, 0x9f, 0x43, 0x9b, 0xe0, 0x02, 0x74, 0x32,
    134  1.1  hikaru 	    0x1d, 0x4a, 0x53, 0x86, 0x52, 0x16, 0x4b, 0x53,
    135  1.1  hikaru 	    0x55, 0x4a, 0x50, 0x81, 0x84, 0xa0, 0xc3, 0x16 }
    136  1.1  hikaru 	},
    137  1.1  hikaru 	{ 8, CRYPTO_SHA2_384_HMAC, 48, 50, 24,
    138  1.1  hikaru 	  { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
    139  1.1  hikaru 	    0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
    140  1.1  hikaru 	    0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
    141  1.1  hikaru 	    0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
    142  1.1  hikaru 	    0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11,
    143  1.1  hikaru 	    0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19 },
    144  1.1  hikaru 	  { 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
    145  1.1  hikaru 	    0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
    146  1.1  hikaru 	    0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
    147  1.1  hikaru 	    0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
    148  1.1  hikaru 	    0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
    149  1.1  hikaru 	    0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
    150  1.1  hikaru 	    0xcd, 0xcd },
    151  1.1  hikaru 	  { 0x5b, 0x54, 0x00, 0x85, 0xc6, 0xe6, 0x35, 0x80,
    152  1.1  hikaru 	    0x96, 0x53, 0x2b, 0x24, 0x93, 0x60, 0x9e, 0xd1,
    153  1.1  hikaru 	    0xcb, 0x29, 0x8f, 0x77, 0x4f, 0x87, 0xbb, 0x5c }
    154  1.1  hikaru 	},
    155  1.1  hikaru 	{ 9, CRYPTO_SHA2_512_HMAC, 64, 8, 32,
    156  1.1  hikaru 	  { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
    157  1.1  hikaru 	    0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
    158  1.1  hikaru 	    0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
    159  1.1  hikaru 	    0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
    160  1.1  hikaru 	    0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
    161  1.1  hikaru 	    0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
    162  1.1  hikaru 	    0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
    163  1.1  hikaru 	    0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b },
    164  1.1  hikaru 	  "Hi There",
    165  1.1  hikaru 	  { 0x63, 0x7e, 0xdc, 0x6e, 0x01, 0xdc, 0xe7, 0xe6,
    166  1.1  hikaru 	    0x74, 0x2a, 0x99, 0x45, 0x1a, 0xae, 0x82, 0xdf,
    167  1.1  hikaru 	    0x23, 0xda, 0x3e, 0x92, 0x43, 0x9e, 0x59, 0x0e,
    168  1.1  hikaru 	    0x43, 0xe7, 0x61, 0xb3, 0x3e, 0x91, 0x0f, 0xb8 }
    169  1.1  hikaru 	},
    170  1.1  hikaru 	{ 10, CRYPTO_SHA2_512_HMAC, 64, 28, 32,
    171  1.1  hikaru 	  "JefeJefeJefeJefe"
    172  1.1  hikaru 	  "JefeJefeJefeJefe"
    173  1.1  hikaru 	  "JefeJefeJefeJefe"
    174  1.1  hikaru 	  "JefeJefeJefeJefe",
    175  1.1  hikaru 	  "what do ya want "
    176  1.1  hikaru 	  "for nothing?",
    177  1.1  hikaru 	  { 0xcb, 0x37, 0x09, 0x17, 0xae, 0x8a, 0x7c, 0xe2,
    178  1.1  hikaru 	    0x8c, 0xfd, 0x1d, 0x8f, 0x47, 0x05, 0xd6, 0x14,
    179  1.1  hikaru 	    0x1c, 0x17, 0x3b, 0x2a, 0x93, 0x62, 0xc1, 0x5d,
    180  1.1  hikaru 	    0xf2, 0x35, 0xdf, 0xb2, 0x51, 0xb1, 0x54, 0x54 }
    181  1.1  hikaru 	},
    182  1.1  hikaru 	{ 11, CRYPTO_SHA2_512_HMAC, 64, 50, 32,
    183  1.1  hikaru 	  { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
    184  1.1  hikaru 	    0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
    185  1.1  hikaru 	    0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
    186  1.1  hikaru 	    0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
    187  1.1  hikaru 	    0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
    188  1.1  hikaru 	    0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
    189  1.1  hikaru 	    0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
    190  1.1  hikaru 	    0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa },
    191  1.1  hikaru 	  { 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
    192  1.1  hikaru 	    0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
    193  1.1  hikaru 	    0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
    194  1.1  hikaru 	    0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
    195  1.1  hikaru 	    0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
    196  1.1  hikaru 	    0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
    197  1.1  hikaru 	    0xdd, 0xdd },
    198  1.1  hikaru 	  { 0x2e, 0xe7, 0xac, 0xd7, 0x83, 0x62, 0x4c, 0xa9,
    199  1.1  hikaru 	    0x39, 0x87, 0x10, 0xf3, 0xee, 0x05, 0xae, 0x41,
    200  1.1  hikaru 	    0xb9, 0xf9, 0xb0, 0x51, 0x0c, 0x87, 0xe4, 0x9e,
    201  1.1  hikaru 	    0x58, 0x6c, 0xc9, 0xbf, 0x96, 0x17, 0x33, 0xd8
    202  1.1  hikaru 	  }
    203  1.1  hikaru 	},
    204  1.1  hikaru 	{ 12, CRYPTO_SHA2_512_HMAC, 64, 50, 32,
    205  1.1  hikaru 	  { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
    206  1.1  hikaru 	    0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
    207  1.1  hikaru 	    0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
    208  1.1  hikaru 	    0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
    209  1.1  hikaru 	    0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
    210  1.1  hikaru 	    0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
    211  1.1  hikaru 	    0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
    212  1.1  hikaru 	    0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40 },
    213  1.1  hikaru 	  { 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
    214  1.1  hikaru 	    0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
    215  1.1  hikaru 	    0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
    216  1.1  hikaru 	    0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
    217  1.1  hikaru 	    0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
    218  1.1  hikaru 	    0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
    219  1.1  hikaru 	    0xcd, 0xcd },
    220  1.1  hikaru 	  { 0x5e, 0x66, 0x88, 0xe5, 0xa3, 0xda, 0xec, 0x82,
    221  1.1  hikaru 	    0x6c, 0xa3, 0x2e, 0xae, 0xa2, 0x24, 0xef, 0xf5,
    222  1.1  hikaru 	    0xe7, 0x00, 0x62, 0x89, 0x47, 0x47, 0x0e, 0x13,
    223  1.1  hikaru 	    0xad, 0x01, 0x30, 0x25, 0x61, 0xba, 0xb1, 0x08 }
    224  1.1  hikaru 	},
    225  1.1  hikaru };
    226  1.1  hikaru 
    227  1.1  hikaru int
    228  1.1  hikaru main(void)
    229  1.1  hikaru {
    230  1.1  hikaru 	size_t i;
    231  1.1  hikaru 	int fd, res;
    232  1.1  hikaru 	struct session_op cs;
    233  1.1  hikaru 	struct crypt_op co;
    234  1.1  hikaru 	unsigned char buf[80];
    235  1.1  hikaru 
    236  1.1  hikaru 	fd = open("/dev/crypto", O_RDWR, 0);
    237  1.1  hikaru 	if (fd < 0)
    238  1.1  hikaru 		err(1, "open");
    239  1.1  hikaru 	for (i = 0; i < __arraycount(tests); i++) {
    240  1.1  hikaru 		memset(&cs, 0, sizeof(cs));
    241  1.1  hikaru 		cs.mac = tests[i].alg;
    242  1.1  hikaru 		cs.mackeylen = tests[i].key_len;
    243  1.1  hikaru 		cs.mackey = __UNCONST(&tests[i].key);
    244  1.1  hikaru 		res = ioctl(fd, CIOCGSESSION, &cs);
    245  1.1  hikaru 		if (res < 0)
    246  1.1  hikaru 			err(1, "CIOCGSESSION test %d", tests[i].num);
    247  1.1  hikaru 
    248  1.1  hikaru 		memset(&co, 0, sizeof(co));
    249  1.1  hikaru 		memset(buf, 0, sizeof(buf));
    250  1.1  hikaru 		co.ses = cs.ses;
    251  1.1  hikaru 		co.op = COP_ENCRYPT;
    252  1.1  hikaru 		co.len = tests[i].len;
    253  1.1  hikaru 		co.src = __UNCONST(&tests[i].data);
    254  1.1  hikaru 		co.mac = buf;
    255  1.1  hikaru 		res = ioctl(fd, CIOCCRYPT, &co);
    256  1.1  hikaru 		if (res < 0)
    257  1.1  hikaru 			err(1, "CIOCCRYPT test %d", tests[i].num);
    258  1.1  hikaru 
    259  1.1  hikaru 		/* compare with trailing zeros */
    260  1.1  hikaru 		if (memcmp(co.mac, &tests[i].mac, sizeof(tests[i].mac)))
    261  1.1  hikaru 			errx(1, "verification failed test %d", tests[i].num);
    262  1.1  hikaru 
    263  1.1  hikaru 		res = ioctl(fd, CIOCFSESSION, &cs.ses);
    264  1.1  hikaru 		if (res < 0)
    265  1.1  hikaru 			err(1, "CIOCFSESSION test %d", tests[i].num);
    266  1.1  hikaru 	}
    267  1.1  hikaru 	return 0;
    268  1.1  hikaru }
    269