LCOV - code coverage report
Current view: top level - netwerk/srtp/src/crypto/kernel - key.c (source / functions) Hit Total Coverage
Test: output.info Lines: 0 25 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 4 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * key.c
       3             :  *
       4             :  * key usage limits enforcement
       5             :  * 
       6             :  * David A. Mcgrew
       7             :  * Cisco Systems, Inc.
       8             :  */
       9             : /*
      10             :  *      
      11             :  * Copyright (c) 2001-2006 Cisco Systems, Inc.
      12             :  * All rights reserved.
      13             :  * 
      14             :  * Redistribution and use in source and binary forms, with or without
      15             :  * modification, are permitted provided that the following conditions
      16             :  * are met:
      17             :  * 
      18             :  *   Redistributions of source code must retain the above copyright
      19             :  *   notice, this list of conditions and the following disclaimer.
      20             :  * 
      21             :  *   Redistributions in binary form must reproduce the above
      22             :  *   copyright notice, this list of conditions and the following
      23             :  *   disclaimer in the documentation and/or other materials provided
      24             :  *   with the distribution.
      25             :  * 
      26             :  *   Neither the name of the Cisco Systems, Inc. nor the names of its
      27             :  *   contributors may be used to endorse or promote products derived
      28             :  *   from this software without specific prior written permission.
      29             :  * 
      30             :  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
      31             :  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
      32             :  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
      33             :  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
      34             :  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
      35             :  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
      36             :  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
      37             :  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
      38             :  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
      39             :  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
      40             :  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
      41             :  * OF THE POSSIBILITY OF SUCH DAMAGE.
      42             :  *
      43             :  */
      44             : 
      45             : #include "key.h"
      46             : 
      47             : #define soft_limit 0x10000
      48             : 
      49             : err_status_t
      50           0 : key_limit_set(key_limit_t key, const xtd_seq_num_t s) {
      51             : #ifdef NO_64BIT_MATH
      52             :   if (high32(s) == 0 && low32(s) < soft_limit)
      53             :     return err_status_bad_param;
      54             : #else
      55           0 :   if (s < soft_limit)
      56           0 :     return err_status_bad_param;
      57             : #endif
      58           0 :   key->num_left = s;
      59           0 :   key->state = key_state_normal;
      60           0 :   return err_status_ok;
      61             : }
      62             : 
      63             : err_status_t
      64           0 : key_limit_clone(key_limit_t original, key_limit_t *new_key) {
      65           0 :   if (original == NULL)
      66           0 :     return err_status_bad_param;
      67           0 :   *new_key = original;
      68           0 :   return err_status_ok;
      69             : }
      70             : 
      71             : err_status_t
      72           0 : key_limit_check(const key_limit_t key) {
      73           0 :   if (key->state == key_state_expired)
      74           0 :     return err_status_key_expired;
      75           0 :   return err_status_ok;
      76             : }
      77             : 
      78             : key_event_t
      79           0 : key_limit_update(key_limit_t key) {
      80             : #ifdef NO_64BIT_MATH
      81             :   if (low32(key->num_left) == 0)
      82             :   {
      83             :           // carry
      84             :           key->num_left = make64(high32(key->num_left)-1,low32(key->num_left) - 1);
      85             :   }
      86             :   else
      87             :   {
      88             :           // no carry
      89             :           key->num_left = make64(high32(key->num_left),low32(key->num_left) - 1);
      90             :   }
      91             :   if (high32(key->num_left) != 0 || low32(key->num_left) >= soft_limit) {
      92             :     return key_event_normal;   /* we're above the soft limit */
      93             :   }
      94             : #else
      95           0 :   key->num_left--;
      96           0 :   if (key->num_left >= soft_limit) {
      97           0 :     return key_event_normal;   /* we're above the soft limit */
      98             :   }
      99             : #endif
     100           0 :   if (key->state == key_state_normal) {
     101             :     /* we just passed the soft limit, so change the state */
     102           0 :     key->state = key_state_past_soft_limit;
     103             :   }
     104             : #ifdef NO_64BIT_MATH
     105             :   if (low32(key->num_left) == 0 && high32(key->num_left == 0))
     106             : #else
     107           0 :   if (key->num_left < 1)
     108             : #endif
     109             :   { /* we just hit the hard limit */
     110           0 :     key->state = key_state_expired;
     111           0 :     return key_event_hard_limit;
     112             :   }
     113           0 :    return key_event_soft_limit;
     114             : }
     115             : 

Generated by: LCOV version 1.13