LCOV - code coverage report
Current view: top level - src/libavutil/tests - cast5.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 32 41 78.0 %
Date: 2017-01-22 02:20:28 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /*
       2             :  * An implementation of the CAST128 algorithm as mentioned in RFC2144
       3             :  * Copyright (c) 2014 Supraja Meedinti
       4             :  *
       5             :  * This file is part of FFmpeg.
       6             :  *
       7             :  * FFmpeg is free software; you can redistribute it and/or
       8             :  * modify it under the terms of the GNU Lesser General Public
       9             :  * License as published by the Free Software Foundation; either
      10             :  * version 2.1 of the License, or (at your option) any later version.
      11             :  *
      12             :  * FFmpeg is distributed in the hope that it will be useful,
      13             :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      14             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      15             :  * Lesser General Public License for more details.
      16             :  *
      17             :  * You should have received a copy of the GNU Lesser General Public
      18             :  * License along with FFmpeg; if not, write to the Free Software
      19             :  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
      20             :  */
      21             : 
      22             : #include "libavutil/cast5.h"
      23             : #include "libavutil/log.h"
      24             : 
      25           1 : int main(int argc, char** argv)
      26             : {
      27             : 
      28             :     static const uint8_t Key[3][16] = {
      29             :         {0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78, 0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9a},
      30             :         {0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78, 0x23, 0x45},
      31             :         {0x01, 0x23, 0x45, 0x67, 0x12}
      32             :     };
      33             :     static const uint8_t rpt[8] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef};
      34             :     static const uint8_t rct[3][8] = {
      35             :         {0x23, 0x8b, 0x4f, 0xe5, 0x84, 0x7e, 0x44, 0xb2},
      36             :         {0xeb, 0x6a, 0x71, 0x1a, 0x2c, 0x02, 0x27, 0x1b},
      37             :         {0x7a, 0xc8, 0x16, 0xd1, 0x6e, 0x9b, 0x30, 0x2e}
      38             :     };
      39             :     static const uint8_t rct2[2][16] = {
      40             :         {0xee, 0xa9, 0xd0, 0xa2, 0x49, 0xfd, 0x3b, 0xa6, 0xb3, 0x43, 0x6f, 0xb8, 0x9d, 0x6d, 0xca, 0x92},
      41             :         {0xb2, 0xc9, 0x5e, 0xb0, 0x0c, 0x31, 0xad, 0x71, 0x80, 0xac, 0x05, 0xb8, 0xe8, 0x3d, 0x69, 0x6e}
      42             :     };
      43             :     static const uint8_t iv[8] = {0xee, 0xa9, 0xd0, 0xa2, 0x49, 0xfd, 0x3b, 0xa6};
      44             :     static uint8_t rpt2[2][16];
      45           1 :     int i, j, err = 0;
      46             :     static const int key_bits[3] = {128, 80, 40};
      47             :     uint8_t temp[8];
      48             :     struct AVCAST5 *cs;
      49           1 :     cs = av_cast5_alloc();
      50           1 :     if (!cs)
      51           0 :         return 1;
      52           4 :     for (j = 0; j < 3; j++){
      53             : 
      54           3 :         av_cast5_init(cs, Key[j], key_bits[j]);
      55           3 :         av_cast5_crypt(cs, temp, rpt, 1, 0);
      56          27 :         for (i = 0;i < 8; i++){
      57          24 :             if (rct[j][i] != temp[i]){
      58           0 :                 av_log(NULL, AV_LOG_ERROR, "%d %02x %02x\n", i, rct[j][i], temp[i]);
      59           0 :                 err = 1;
      60             :             }
      61             :         }
      62             : 
      63           3 :         av_cast5_crypt(cs, temp, rct[j], 1, 1);
      64          27 :         for (i =0; i < 8; i++) {
      65          24 :             if (rpt[i] != temp[i]) {
      66           0 :                 av_log(NULL, AV_LOG_ERROR, "%d %02x %02x\n", i, rpt[i], temp[i]);
      67           0 :                 err = 1;
      68             :             }
      69             :         }
      70             :     }
      71           1 :     memcpy(rpt2[0], Key[0], 16);
      72           1 :     memcpy(rpt2[1], Key[0], 16);
      73     1000001 :     for (i = 0; i < 1000000; i++){
      74     1000000 :         av_cast5_init(cs, rpt2[1], 128);
      75     1000000 :         av_cast5_crypt(cs, rpt2[0], rpt2[0], 2, 0);
      76     1000000 :         av_cast5_init(cs, rpt2[0], 128);
      77     1000000 :         av_cast5_crypt(cs, rpt2[1], rpt2[1], 2, 0);
      78             :     }
      79           3 :     for (j = 0; j < 2; j++) {
      80          34 :         for (i = 0; i < 16; i++) {
      81          32 :             if (rct2[j][i] != rpt2[j][i]) {
      82           0 :                 av_log(NULL, AV_LOG_ERROR, "%d %02x %02x\n", i, rct2[j][i], rpt2[j][i]);
      83           0 :                 err = 1;
      84             :             }
      85             :         }
      86             :     }
      87           4 :     for (j = 0; j < 3; j++) {
      88             : 
      89           3 :         av_cast5_init(cs, Key[j], key_bits[j]);
      90           3 :         memcpy(temp, iv, 8);
      91           3 :         av_cast5_crypt2(cs, rpt2[0], rct2[0], 2, temp, 0);
      92           3 :         memcpy(temp, iv, 8);
      93           3 :         av_cast5_crypt2(cs, rpt2[0], rpt2[0], 2, temp, 1);
      94          51 :         for (i = 0; i < 16; i++) {
      95          48 :             if (rct2[0][i] != rpt2[0][i]) {
      96           0 :                 av_log(NULL, AV_LOG_ERROR, "%d %02x %02x\n", i, rct2[0][i], rpt2[0][i]);
      97           0 :                 err = 1;
      98             :             }
      99             :         }
     100             :     }
     101           1 :     av_free(cs);
     102           1 :     return err;
     103             : }

Generated by: LCOV version 1.12