1*90e502c7SAndroid Build Coastguard Worker /*
2*90e502c7SAndroid Build Coastguard Worker * null_auth.c
3*90e502c7SAndroid Build Coastguard Worker *
4*90e502c7SAndroid Build Coastguard Worker * implements the do-nothing auth algorithm
5*90e502c7SAndroid Build Coastguard Worker *
6*90e502c7SAndroid Build Coastguard Worker * David A. McGrew
7*90e502c7SAndroid Build Coastguard Worker * Cisco Systems, Inc.
8*90e502c7SAndroid Build Coastguard Worker *
9*90e502c7SAndroid Build Coastguard Worker */
10*90e502c7SAndroid Build Coastguard Worker
11*90e502c7SAndroid Build Coastguard Worker /*
12*90e502c7SAndroid Build Coastguard Worker *
13*90e502c7SAndroid Build Coastguard Worker * Copyright (c) 2001-2017, Cisco Systems, Inc.
14*90e502c7SAndroid Build Coastguard Worker * All rights reserved.
15*90e502c7SAndroid Build Coastguard Worker *
16*90e502c7SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without
17*90e502c7SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions
18*90e502c7SAndroid Build Coastguard Worker * are met:
19*90e502c7SAndroid Build Coastguard Worker *
20*90e502c7SAndroid Build Coastguard Worker * Redistributions of source code must retain the above copyright
21*90e502c7SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer.
22*90e502c7SAndroid Build Coastguard Worker *
23*90e502c7SAndroid Build Coastguard Worker * Redistributions in binary form must reproduce the above
24*90e502c7SAndroid Build Coastguard Worker * copyright notice, this list of conditions and the following
25*90e502c7SAndroid Build Coastguard Worker * disclaimer in the documentation and/or other materials provided
26*90e502c7SAndroid Build Coastguard Worker * with the distribution.
27*90e502c7SAndroid Build Coastguard Worker *
28*90e502c7SAndroid Build Coastguard Worker * Neither the name of the Cisco Systems, Inc. nor the names of its
29*90e502c7SAndroid Build Coastguard Worker * contributors may be used to endorse or promote products derived
30*90e502c7SAndroid Build Coastguard Worker * from this software without specific prior written permission.
31*90e502c7SAndroid Build Coastguard Worker *
32*90e502c7SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33*90e502c7SAndroid Build Coastguard Worker * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34*90e502c7SAndroid Build Coastguard Worker * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
35*90e502c7SAndroid Build Coastguard Worker * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
36*90e502c7SAndroid Build Coastguard Worker * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
37*90e502c7SAndroid Build Coastguard Worker * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
38*90e502c7SAndroid Build Coastguard Worker * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
39*90e502c7SAndroid Build Coastguard Worker * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
40*90e502c7SAndroid Build Coastguard Worker * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
41*90e502c7SAndroid Build Coastguard Worker * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
42*90e502c7SAndroid Build Coastguard Worker * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
43*90e502c7SAndroid Build Coastguard Worker * OF THE POSSIBILITY OF SUCH DAMAGE.
44*90e502c7SAndroid Build Coastguard Worker *
45*90e502c7SAndroid Build Coastguard Worker */
46*90e502c7SAndroid Build Coastguard Worker
47*90e502c7SAndroid Build Coastguard Worker #ifdef HAVE_CONFIG_H
48*90e502c7SAndroid Build Coastguard Worker #include <config.h>
49*90e502c7SAndroid Build Coastguard Worker #endif
50*90e502c7SAndroid Build Coastguard Worker
51*90e502c7SAndroid Build Coastguard Worker #include "null_auth.h"
52*90e502c7SAndroid Build Coastguard Worker #include "err.h" /* for srtp_debug */
53*90e502c7SAndroid Build Coastguard Worker #include "alloc.h"
54*90e502c7SAndroid Build Coastguard Worker #include "cipher_types.h"
55*90e502c7SAndroid Build Coastguard Worker
srtp_null_auth_alloc(srtp_auth_t ** a,int key_len,int out_len)56*90e502c7SAndroid Build Coastguard Worker static srtp_err_status_t srtp_null_auth_alloc(srtp_auth_t **a,
57*90e502c7SAndroid Build Coastguard Worker int key_len,
58*90e502c7SAndroid Build Coastguard Worker int out_len)
59*90e502c7SAndroid Build Coastguard Worker {
60*90e502c7SAndroid Build Coastguard Worker extern const srtp_auth_type_t srtp_null_auth;
61*90e502c7SAndroid Build Coastguard Worker uint8_t *pointer;
62*90e502c7SAndroid Build Coastguard Worker
63*90e502c7SAndroid Build Coastguard Worker debug_print(srtp_mod_auth, "allocating auth func with key length %d",
64*90e502c7SAndroid Build Coastguard Worker key_len);
65*90e502c7SAndroid Build Coastguard Worker debug_print(srtp_mod_auth, " tag length %d",
66*90e502c7SAndroid Build Coastguard Worker out_len);
67*90e502c7SAndroid Build Coastguard Worker
68*90e502c7SAndroid Build Coastguard Worker /* allocate memory for auth and srtp_null_auth_ctx_t structures */
69*90e502c7SAndroid Build Coastguard Worker pointer = (uint8_t *)srtp_crypto_alloc(sizeof(srtp_null_auth_ctx_t) +
70*90e502c7SAndroid Build Coastguard Worker sizeof(srtp_auth_t));
71*90e502c7SAndroid Build Coastguard Worker if (pointer == NULL) {
72*90e502c7SAndroid Build Coastguard Worker return srtp_err_status_alloc_fail;
73*90e502c7SAndroid Build Coastguard Worker }
74*90e502c7SAndroid Build Coastguard Worker
75*90e502c7SAndroid Build Coastguard Worker /* set pointers */
76*90e502c7SAndroid Build Coastguard Worker *a = (srtp_auth_t *)pointer;
77*90e502c7SAndroid Build Coastguard Worker (*a)->type = &srtp_null_auth;
78*90e502c7SAndroid Build Coastguard Worker (*a)->state = pointer + sizeof(srtp_auth_t);
79*90e502c7SAndroid Build Coastguard Worker (*a)->out_len = out_len;
80*90e502c7SAndroid Build Coastguard Worker (*a)->prefix_len = out_len;
81*90e502c7SAndroid Build Coastguard Worker (*a)->key_len = key_len;
82*90e502c7SAndroid Build Coastguard Worker
83*90e502c7SAndroid Build Coastguard Worker return srtp_err_status_ok;
84*90e502c7SAndroid Build Coastguard Worker }
85*90e502c7SAndroid Build Coastguard Worker
srtp_null_auth_dealloc(srtp_auth_t * a)86*90e502c7SAndroid Build Coastguard Worker static srtp_err_status_t srtp_null_auth_dealloc(srtp_auth_t *a)
87*90e502c7SAndroid Build Coastguard Worker {
88*90e502c7SAndroid Build Coastguard Worker extern const srtp_auth_type_t srtp_null_auth;
89*90e502c7SAndroid Build Coastguard Worker
90*90e502c7SAndroid Build Coastguard Worker /* zeroize entire state*/
91*90e502c7SAndroid Build Coastguard Worker octet_string_set_to_zero(a, sizeof(srtp_null_auth_ctx_t) +
92*90e502c7SAndroid Build Coastguard Worker sizeof(srtp_auth_t));
93*90e502c7SAndroid Build Coastguard Worker
94*90e502c7SAndroid Build Coastguard Worker /* free memory */
95*90e502c7SAndroid Build Coastguard Worker srtp_crypto_free(a);
96*90e502c7SAndroid Build Coastguard Worker
97*90e502c7SAndroid Build Coastguard Worker return srtp_err_status_ok;
98*90e502c7SAndroid Build Coastguard Worker }
99*90e502c7SAndroid Build Coastguard Worker
srtp_null_auth_init(void * statev,const uint8_t * key,int key_len)100*90e502c7SAndroid Build Coastguard Worker static srtp_err_status_t srtp_null_auth_init(void *statev,
101*90e502c7SAndroid Build Coastguard Worker const uint8_t *key,
102*90e502c7SAndroid Build Coastguard Worker int key_len)
103*90e502c7SAndroid Build Coastguard Worker {
104*90e502c7SAndroid Build Coastguard Worker /* srtp_null_auth_ctx_t *state = (srtp_null_auth_ctx_t *)statev; */
105*90e502c7SAndroid Build Coastguard Worker /* accept any length of key, and do nothing */
106*90e502c7SAndroid Build Coastguard Worker
107*90e502c7SAndroid Build Coastguard Worker return srtp_err_status_ok;
108*90e502c7SAndroid Build Coastguard Worker }
109*90e502c7SAndroid Build Coastguard Worker
srtp_null_auth_compute(void * statev,const uint8_t * message,int msg_octets,int tag_len,uint8_t * result)110*90e502c7SAndroid Build Coastguard Worker static srtp_err_status_t srtp_null_auth_compute(void *statev,
111*90e502c7SAndroid Build Coastguard Worker const uint8_t *message,
112*90e502c7SAndroid Build Coastguard Worker int msg_octets,
113*90e502c7SAndroid Build Coastguard Worker int tag_len,
114*90e502c7SAndroid Build Coastguard Worker uint8_t *result)
115*90e502c7SAndroid Build Coastguard Worker {
116*90e502c7SAndroid Build Coastguard Worker /* srtp_null_auth_ctx_t *state = (srtp_null_auth_ctx_t *)statev; */
117*90e502c7SAndroid Build Coastguard Worker
118*90e502c7SAndroid Build Coastguard Worker return srtp_err_status_ok;
119*90e502c7SAndroid Build Coastguard Worker }
120*90e502c7SAndroid Build Coastguard Worker
srtp_null_auth_update(void * statev,const uint8_t * message,int msg_octets)121*90e502c7SAndroid Build Coastguard Worker static srtp_err_status_t srtp_null_auth_update(void *statev,
122*90e502c7SAndroid Build Coastguard Worker const uint8_t *message,
123*90e502c7SAndroid Build Coastguard Worker int msg_octets)
124*90e502c7SAndroid Build Coastguard Worker {
125*90e502c7SAndroid Build Coastguard Worker /* srtp_null_auth_ctx_t *state = (srtp_null_auth_ctx_t *)statev; */
126*90e502c7SAndroid Build Coastguard Worker
127*90e502c7SAndroid Build Coastguard Worker return srtp_err_status_ok;
128*90e502c7SAndroid Build Coastguard Worker }
129*90e502c7SAndroid Build Coastguard Worker
srtp_null_auth_start(void * statev)130*90e502c7SAndroid Build Coastguard Worker static srtp_err_status_t srtp_null_auth_start(void *statev)
131*90e502c7SAndroid Build Coastguard Worker {
132*90e502c7SAndroid Build Coastguard Worker /* srtp_null_auth_ctx_t *state = (srtp_null_auth_ctx_t *)statev; */
133*90e502c7SAndroid Build Coastguard Worker
134*90e502c7SAndroid Build Coastguard Worker return srtp_err_status_ok;
135*90e502c7SAndroid Build Coastguard Worker }
136*90e502c7SAndroid Build Coastguard Worker
137*90e502c7SAndroid Build Coastguard Worker /*
138*90e502c7SAndroid Build Coastguard Worker * srtp_auth_type_t - defines description, test case, and null_auth
139*90e502c7SAndroid Build Coastguard Worker * metaobject
140*90e502c7SAndroid Build Coastguard Worker */
141*90e502c7SAndroid Build Coastguard Worker
142*90e502c7SAndroid Build Coastguard Worker /* begin test case 0 */
143*90e502c7SAndroid Build Coastguard Worker
144*90e502c7SAndroid Build Coastguard Worker static const srtp_auth_test_case_t srtp_null_auth_test_case_0 = {
145*90e502c7SAndroid Build Coastguard Worker 0, /* octets in key */
146*90e502c7SAndroid Build Coastguard Worker NULL, /* key */
147*90e502c7SAndroid Build Coastguard Worker 0, /* octets in data */
148*90e502c7SAndroid Build Coastguard Worker NULL, /* data */
149*90e502c7SAndroid Build Coastguard Worker 0, /* octets in tag */
150*90e502c7SAndroid Build Coastguard Worker NULL, /* tag */
151*90e502c7SAndroid Build Coastguard Worker NULL /* pointer to next testcase */
152*90e502c7SAndroid Build Coastguard Worker };
153*90e502c7SAndroid Build Coastguard Worker
154*90e502c7SAndroid Build Coastguard Worker /* end test case 0 */
155*90e502c7SAndroid Build Coastguard Worker
156*90e502c7SAndroid Build Coastguard Worker static const char srtp_null_auth_description[] = "null authentication function";
157*90e502c7SAndroid Build Coastguard Worker
158*90e502c7SAndroid Build Coastguard Worker const srtp_auth_type_t srtp_null_auth = {
159*90e502c7SAndroid Build Coastguard Worker srtp_null_auth_alloc, /* */
160*90e502c7SAndroid Build Coastguard Worker srtp_null_auth_dealloc, /* */
161*90e502c7SAndroid Build Coastguard Worker srtp_null_auth_init, /* */
162*90e502c7SAndroid Build Coastguard Worker srtp_null_auth_compute, /* */
163*90e502c7SAndroid Build Coastguard Worker srtp_null_auth_update, /* */
164*90e502c7SAndroid Build Coastguard Worker srtp_null_auth_start, /* */
165*90e502c7SAndroid Build Coastguard Worker srtp_null_auth_description, /* */
166*90e502c7SAndroid Build Coastguard Worker &srtp_null_auth_test_case_0, /* */
167*90e502c7SAndroid Build Coastguard Worker SRTP_NULL_AUTH /* */
168*90e502c7SAndroid Build Coastguard Worker };
169