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