ycipher.h
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:4k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. /* -*- Mode: C; c-file-style: "bsd" -*- */
  2. #ifndef YCIPHER_H
  3. #define YCIPHER_H
  4. /* block cipher interface */
  5. /* default to 3DES for yarrow 160 */
  6. #if !defined(YARROW_CIPHER_3DES) && !defined(YARROW_CIPHER_BLOWFISH)
  7. #   if !defined(YARROW_CIPHER_IDEA)
  8. #       define YARROW_CIPHER_3DES
  9. #   endif
  10. #endif
  11. #if defined(YARROW_CIPHER_3DES)
  12. /* For yarrow160 use 3 key 3DES */
  13. #include "openssl/des.h"
  14. /* first deal with DES */
  15. typedef struct { des_key_schedule ks; } DES_CTX;
  16. #define DES_BLOCK_SIZE DES_KEY_SZ
  17. #define DES_PARITY_KEY_SIZE DES_KEY_SZ
  18. /* effective key size, sans parity */
  19. #define DES_KEY_SIZE (DES_PARITY_KEY_SIZE-1) 
  20. /*  key schedule needs to stretch 56 bit key to 64 bit key leaving
  21.  *  slots for parity bits 
  22.  */
  23. #define DES_Init( ctx, key )                               
  24. do {                                                       
  25.     byte parity_key[ DES_PARITY_KEY_SIZE ];                
  26.     void* parity_keyp = (void*)parity_key;                 
  27.     parity_key[ 0 ] = (key)[ 0 ];                          
  28.     parity_key[ 1 ] = (key)[ 0 ] << 7 | (key)[ 1 ] >> 2;   
  29.     parity_key[ 2 ] = (key)[ 1 ] << 6 | (key)[ 2 ] >> 3;   
  30.     parity_key[ 3 ] = (key)[ 2 ] << 5 | (key)[ 3 ] >> 4;   
  31.     parity_key[ 4 ] = (key)[ 3 ] << 4 | (key)[ 4 ] >> 5;   
  32.     parity_key[ 5 ] = (key)[ 4 ] << 3 | (key)[ 5 ] >> 6;   
  33.     parity_key[ 6 ] = (key)[ 5 ] << 2 | (key)[ 6 ] >> 7;   
  34.     parity_key[ 7 ] = (key)[ 6 ] << 1;                     
  35.     des_key_sched( (des_cblock*) parity_keyp, (ctx)->ks ); 
  36. } while (0)
  37. typedef struct 
  38. {
  39.     DES_CTX ks1, ks2, ks3;
  40. } CIPHER_CTX;
  41. #define CIPHER_BLOCK_SIZE DES_BLOCK_SIZE
  42. #define CIPHER_KEY_SIZE (DES_KEY_SIZE * 3)
  43. #if defined( YARROW_NO_MATHLIB )
  44. /* see macros at end for functions evaluated */
  45. #define POW_CIPHER_KEY_SIZE    72057594037927936.0
  46. #define POW_CIPHER_BLOCK_SIZE  18446744073709551616.0
  47. #endif
  48. #define CIPHER_Init(ctx, key)                      
  49. do {                                               
  50.     DES_Init( &(ctx)->ks1, key );                  
  51.     DES_Init( &(ctx)->ks2, key+DES_KEY_SIZE );     
  52.     DES_Init( &(ctx)->ks3, key+2*DES_KEY_SIZE );   
  53. } while (0)
  54. #define CIPHER_Encrypt_Block(ctx, in, out)
  55.     des_ecb3_encrypt((des_cblock*) in, (des_cblock*) out,
  56.                      (ctx)->ks1.ks, (ctx)->ks2.ks, (ctx)->ks3.ks, 1)
  57. #elif defined(YARROW_CIPHER_BLOWFISH)
  58. /* macros to allow blowfish */
  59. #include "openssl/blowfish.h"
  60. typedef struct 
  61. {
  62.     BF_KEY ks;
  63. } CIPHER_CTX;
  64. #define CIPHER_BLOCK_SIZE BF_BLOCK
  65. #define CIPHER_KEY_SIZE 16
  66. #if defined( YARROW_NO_MATHLIB )
  67. /* see macros at end for functions evaluated */
  68. #define POW_CIPHER_KEY_SIZE    6981463658331.6
  69. #define POW_CIPHER_BLOCK_SIZE  18446744073709551616.0
  70. #endif
  71. #define CIPHER_Init(ctx, key)
  72.     BF_set_key(&(ctx)->ks, CIPHER_KEY_SIZE, (void*)key)
  73. #define CIPHER_Encrypt_Block(ctx, in, out)
  74.     BF_ecb_encrypt((void*) in, (void*) out, &(ctx)->ks, 1)
  75. #elif defined(YARROW_CIPHER_IDEA)
  76. /* macros to allow IDEA */
  77. #include "openssl/idea.h"
  78. typedef struct 
  79. {
  80.     IDEA_KEY_SCHEDULE ks;
  81. } CIPHER_CTX;
  82. #define CIPHER_BLOCK_SIZE IDEA_BLOCK
  83. #define CIPHER_KEY_SIZE IDEA_KEY_LENGTH
  84. #if defined( YARROW_NO_MATHLIB )
  85. /* see macros at end for functions evaluated */
  86. #define POW_CIPHER_KEY_SIZE    6981463658331.55909006437584655441
  87. #define POW_CIPHER_BLOCK_SIZE  18446744073709551616.000000
  88. #endif
  89. #define CIPHER_Init(ctx, key)
  90.     idea_set_encrypt_key((void*) key, &(ctx)->ks)
  91. #define CIPHER_Encrypt_Block(ctx, in, out)
  92.     idea_ecb_encrypt((void*)in, (void*)out, &(ctx)->ks)
  93. #endif
  94. #if !defined( YARROW_NO_MATHLIB )
  95. #define POW_CIPHER_KEY_SIZE pow(2.0, CIPHER_KEY_SIZE * 8 / 3.0)
  96. #define POW_CIPHER_BLOCK_SIZE pow(2.0, CIPHER_BLOCK_SIZE * 8)
  97. #endif
  98. #endif /* YCIPHER_H */