⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctr_start.c

📁 一些封装好的加密函数的源代码
💻 C
字号:
/* LibTomCrypt, modular cryptographic library -- Tom St Denis * * LibTomCrypt is a library that provides various cryptographic * algorithms in a highly modular and flexible manner. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org */#include "tomcrypt.h"/**   @file ctr_start.c   CTR implementation, start chain, Tom St Denis*/#ifdef CTR/**   Initialize a CTR context   @param cipher      The index of the cipher desired   @param IV          The initial vector   @param key         The secret key    @param keylen      The length of the secret key (octets)   @param num_rounds  Number of rounds in the cipher desired (0 for default)   @param ctr_mode    The counter mode (CTR_COUNTER_LITTLE_ENDIAN or CTR_COUNTER_BIG_ENDIAN)   @param ctr         The CTR state to initialize   @return CRYPT_OK if successful*/int ctr_start(               int   cipher,               const unsigned char *IV,               const unsigned char *key,       int keylen,                              int  num_rounds, int ctr_mode,                   symmetric_CTR *ctr){   int x, err;   LTC_ARGCHK(IV  != NULL);   LTC_ARGCHK(key != NULL);   LTC_ARGCHK(ctr != NULL);   /* bad param? */   if ((err = cipher_is_valid(cipher)) != CRYPT_OK) {      return err;   }   /* setup cipher */   if ((err = cipher_descriptor[cipher].setup(key, keylen, num_rounds, &ctr->key)) != CRYPT_OK) {      return err;   }   /* copy ctr */   ctr->blocklen = cipher_descriptor[cipher].block_length;   ctr->cipher   = cipher;   ctr->padlen   = 0;   ctr->mode     = ctr_mode;   for (x = 0; x < ctr->blocklen; x++) {       ctr->ctr[x] = IV[x];   }   cipher_descriptor[ctr->cipher].ecb_encrypt(ctr->ctr, ctr->pad, &ctr->key);   return CRYPT_OK;}


int  main(void) 
{ 
   unsigned   char  key[16], IV[16],  buffer[512]; 
   symmetric_CTR   ctr; 
   int  x, err; 

   /*  register  twofish  first  */ 
   if  (register_cipher(&twofish_desc)     == -1)  { 
       printf("Error  registering   cipher.\n"); 
       return  -1; 
   } 

   /*  somehow  fill out  key and  IV */ 
   for(x=0;x<512;x++){
		buffer[x]=x;
		printf("%x,",buffer[x]);
   }
   /*  start  up CTR  mode */ 
   if  ((err  = ctr_start( 
         find_cipher("twofish"),    /* index  of desired   cipher */ 
                                IV, /* the  initial  vector  */ 
                              key,  /* the  secret  key */ 
                                16,  /* length of  secret  key (16 bytes,  128  bits)  */ 
                                 0, /* 0  == default  # of  rounds  */ 
      CTR_COUNTER_LITTLE_ENDIAN,    /* Little  endian  counter  */ 
                            &ctr)   /*  where to  store initialized   CTR state  */ 
       ) != CRYPT_OK)   { 
       printf("ctr_start   error:  %s\n",  error_to_string(err)); 
       return  -1; 
   } 

   /*  somehow  fill buffer  than  encrypt  it */ 
   if  ((err  = ctr_encrypt(          buffer,  /*  plaintext  */ 
                                      buffer,  /*  ciphertext  */ 
                             sizeof(buffer),   /*  length  of data to  encrypt  */ 
                                       &ctr)   /*  previously  initialized  CTR  state  */ 
       ) != CRYPT_OK)   { 
       printf("ctr_encrypt   error:  %s\n",  error_to_string(err)); 
       return  -1; 
   } 
	printf("\n\n");

   for(x=0;x<512;x++){
		printf("%x,",buffer[x]);
   }
   /*  make use  of ciphertext...   */ 

   /*  now we  want to  decrypt  so let’s use ctr_setiv   */ 
   if  ((err  = ctr_setiv(   IV,  /*  the initial  IV  we gave to ctr_start   */ 
                             16,  /*  the IV is  16  bytes long */ 
                           &ctr)  /*  the ctr state  we wish  to modify  */ 
        )  != CRYPT_OK)  { 
       printf("ctr_setiv   error:  %s\n",  error_to_string(err)); 
       return  -1; 
   } 

   if  ((err  = ctr_decrypt(          buffer,  /*  ciphertext  */ 
                                      buffer,  /*  plaintext  */ 
                             sizeof(buffer),   /*  length  of data to  encrypt  */ 
                                       &ctr)   /*  previously  initialized  CTR  state  */ 

        ) != CRYPT_OK)    { 
       printf("ctr_decrypt       error:  %s\n",   error_to_string(err)); 
        return  -1; 
    } 

    /*  terminate   the  stream   */ 
    if  ((err  =  ctr_done(&ctr))     != CRYPT_OK)    { 
       printf("ctr_done      error:  %s\n",   error_to_string(err)); 
        return  -1; 
    } 

    /*  clear  up  and  return   */ 
    zeromem(key,    sizeof(key)); 
    zeromem(&ctr,    sizeof(ctr)); 
	printf("\n\n");
	for(x=0;x<512;x++){
		printf("%x,",buffer[x]);
   }
    return   0; 
} #endif/* $Source: /cvs/libtom/libtomcrypt/src/modes/ctr/ctr_start.c,v $ *//* $Revision: 1.6 $ *//* $Date: 2005/05/05 14:35:59 $ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -