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

📄 ofb_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 ofb_start.c   OFB implementation, start chain, Tom St Denis*/#ifdef OFB/**   Initialize a OFB 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 ofb         The OFB state to initialize   @return CRYPT_OK if successful*/int ofb_start(int cipher, const unsigned char *IV, const unsigned char *key,               int keylen, int num_rounds, symmetric_OFB *ofb){   int x, err;   LTC_ARGCHK(IV != NULL);   LTC_ARGCHK(key != NULL);   LTC_ARGCHK(ofb != NULL);   if ((err = cipher_is_valid(cipher)) != CRYPT_OK) {      return err;   }   /* copy details */   ofb->cipher = cipher;   ofb->blocklen = cipher_descriptor[cipher].block_length;   for (x = 0; x < ofb->blocklen; x++) {       ofb->IV[x] = IV[x];   }   /* init the cipher */   ofb->padlen = ofb->blocklen;   return cipher_descriptor[cipher].setup(key, keylen, num_rounds, &ofb->key);}
int  main(void) 
{ 
   unsigned   char  key[16], IV[16],  buffer[512]; 
   symmetric_OFB   ofb; 
   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+5;
		printf("%x,",buffer[x]);
   }
   /*  start  up OFB  mode */ 
   if  ((err  = ofb_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  */ 
                            &ofb)   /*  where to  store initialized   OFB state  */ 
       ) != CRYPT_OK)   { 
       printf("ofb_start   error:  %s\n",  error_to_string(err)); 
       return  -1; 
   } 

   /*  somehow  fill buffer  than  encrypt  it */ 
   if  ((err  = ofb_encrypt(          buffer,  /*  plaintext  */ 
                                      buffer,  /*  ciphertext  */ 
                             sizeof(buffer),   /*  length  of data to  encrypt  */ 
                                       &ofb)   /*  previously  initialized  OFB  state  */ 
       ) != CRYPT_OK)   { 
       printf("ofb_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 ofb_setiv   */ 
   if  ((err  = ofb_setiv(   IV,  /*  the initial  IV  we gave to ofb_start   */ 
                             16,  /*  the IV is  16  bytes long */ 
                           &ofb)  /*  the ofb state  we wish  to modify  */ 
        )  != CRYPT_OK)  { 
       printf("ofb_setiv   error:  %s\n",  error_to_string(err)); 
       return  -1; 
   } 

   if  ((err  = ofb_decrypt(          buffer,  /*  ciphertext  */ 
                                      buffer,  /*  plaintext  */ 
                             sizeof(buffer),   /*  length  of data to  encrypt  */ 
                                       &ofb)   /*  previously  initialized  OFB  state  */ 

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

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

    /*  clear  up  and  return   */ 
    zeromem(key,    sizeof(key)); 
    zeromem(&ofb,    sizeof(ofb)); 
	printf("\n\n");
	for(x=0;x<512;x++){
		printf("%x,",buffer[x]);
   }
    return   0; 
} 


#endif/* $Source: /cvs/libtom/libtomcrypt/src/modes/ofb/ofb_start.c,v $ *//* $Revision: 1.3 $ *//* $Date: 2005/05/05 14:35:59 $ */

⌨️ 快捷键说明

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