pike.git / src / post_modules / Nettle / cipher.cmod

version» Context lines:

pike.git/src/post_modules/Nettle/cipher.cmod:480:    *! @[BlockCipher] class, which is the base class    *! for all block ciphers.    */   PIKECLASS BufferedCipher   {    /* NOTE: MUST be first in the class to simplify access to symbols    * in Cipher!    */    /*! @decl inherit Cipher    */ -  INHERIT Nettle_Cipher; +  INHERIT Cipher;      #define PAD_SSL 0   #define PAD_ISO_10126 1   #define PAD_ANSI_X923 2   #define PAD_PKCS7 3   #define PAD_ZERO 4   #define PAD_TLS 5       /*! @module Buffer    *! Acts as a buffer so that data can be fed to the cipher in blocks
pike.git/src/post_modules/Nettle/cipher.cmod:1098:    *! Extends the @[BufferedCipher] class with various operating modes.    */   PIKECLASS BlockCipher   {    /*! @decl inherit __builtin.Nettle.BlockCipher    */    INHERIT "__builtin.Nettle.BlockCipher";       /*! @decl inherit BufferedCipher    */ -  INHERIT Nettle_BufferedCipher; +  INHERIT BufferedCipher;       /*! @module CBC    *! Implementation of the Cipher Block Chaining mode (CBC).    *!    *! Works as a wrapper for the cipher implemented by overloading    *! the parent class (@[Cipher]).    *!    *! @seealso    *! @[Crypto.CBC], @[GCM]    */    PIKEVAR object(Nettle_BlockCipher_cq__CBC) CBC;       PIKECLASS _CBC    program_flags PROGRAM_NEEDS_PARENT|PROGRAM_USES_PARENT;    {    /*! @decl inherit BufferedCipher    */ -  INHERIT Nettle_BufferedCipher; +  INHERIT BufferedCipher;       PIKEFUN string(0..255) name()    optflags OPT_TRY_OPTIMIZE;    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_name_fun_num, args);    push_constant_text(".CBC");    f_add(2);    }       PIKEFUN int(1..) block_size()    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_block_size_fun_num, args);    }       PIKEFUN int(1..) key_size()    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_key_size_fun_num, args);    }       PIKEFUN int(0..) iv_size()    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_block_size_fun_num, args);    }       /*! @class State    */    PIKECLASS State    program_flags PROGRAM_NEEDS_PARENT|PROGRAM_USES_PARENT;    {    DOCSTART() @decl inherit Cipher::State    DOCEND()
pike.git/src/post_modules/Nettle/cipher.cmod:1186:    *!    *! Returns the @[Cipher::State] object that this object    *! is to operate on.    *!    *! Defaults to creating the State for the cipher implemented    *! in the parent module.    */    PIKEFUN object(Nettle_Cipher_State) substate_factory()    flags ID_PROTECTED;    { -  apply_external(2, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(2, Nettle_BlockCipher_BufferedCipher_inh_offset +    Nettle_Cipher_State_program_fun_num, 0);    }       /*! @decl void create()    *!    *! Initialize the CBC state with the @[Cipher::State] object    *! returned by @[substate_factory()]. This is usually    *! the State for the cipher implemented in the parent module.    */    PIKEFUN void create()
pike.git/src/post_modules/Nettle/cipher.cmod:1458:    42 + 1,    0, NULL);    f_pcbc_inh_cbc_state_program_fun_num =    really_low_reference_inherited_identifier(NULL, 1,    Nettle_BlockCipher_cq__CBC_State_program_fun_num);    }       PIKEFUN string(0..255) name()    optflags OPT_TRY_OPTIMIZE;    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_name_fun_num, args);    push_constant_text(".PCBC");    f_add(2);    }       /*! @class State    */    PIKECLASS State    program_flags PROGRAM_NEEDS_PARENT|PROGRAM_USES_PARENT;    {
pike.git/src/post_modules/Nettle/cipher.cmod:1598:    *! @seealso    *! @[CBC], @[GCM], @[CFB]    */    PIKEVAR object(Nettle_Cipher) IGE;       PIKECLASS _IGE    program_flags PROGRAM_NEEDS_PARENT|PROGRAM_USES_PARENT;    {    /*! @decl inherit BufferedCipher    */ -  INHERIT Nettle_BufferedCipher; +  INHERIT BufferedCipher;       PIKEFUN string(0..255) name()    optflags OPT_TRY_OPTIMIZE;    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_name_fun_num, args);    push_constant_text(".IGE");    f_add(2);    }       PIKEFUN int(1..) block_size()    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_block_size_fun_num, args);    }       PIKEFUN int(1..) key_size()    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_key_size_fun_num, args);    }       PIKEFUN int(0..) iv_size()    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_block_size_fun_num, args);    push_int(2);    f_multiply(2);    }       /*! @class State    */    PIKECLASS State    program_flags PROGRAM_NEEDS_PARENT|PROGRAM_USES_PARENT;    {
pike.git/src/post_modules/Nettle/cipher.cmod:1670:    *!    *! Returns the @[Cipher::State] object that this object    *! is to operate on.    *!    *! Defaults to creating the State for the cipher implemented    *! in the parent module.    */    PIKEFUN object(Nettle_Cipher_State) substate_factory()    flags ID_PROTECTED;    { -  apply_external(2, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(2, Nettle_BlockCipher_BufferedCipher_inh_offset +    Nettle_Cipher_State_program_fun_num, 0);    }       /*! @decl void create()    *!    *! Initialize the IGE state with the @[Cipher::State] object    *! returned by @[substate_factory()]. This is usually    *! the State for the cipher implemented in the parent module.    */    PIKEFUN void create()
pike.git/src/post_modules/Nettle/cipher.cmod:1979:    *! @seealso    *! @[CBC], @[GCM], @[CFB], @[IGE]    */    PIKEVAR object(Nettle_Cipher) ABC;       PIKECLASS _ABC    program_flags PROGRAM_NEEDS_PARENT|PROGRAM_USES_PARENT;    {    /*! @decl inherit BufferedCipher    */ -  INHERIT Nettle_BufferedCipher; +  INHERIT BufferedCipher;       PIKEFUN string(0..255) name()    optflags OPT_TRY_OPTIMIZE;    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_name_fun_num, args);    push_constant_text(".ABC");    f_add(2);    }       PIKEFUN int(1..) block_size()    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_block_size_fun_num, args);    }       PIKEFUN int(1..) key_size()    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_key_size_fun_num, args);    }       PIKEFUN int(0..) iv_size()    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_block_size_fun_num, args);    push_int(2);    f_multiply(2);    }       /*! @class State    */    PIKECLASS State    program_flags PROGRAM_NEEDS_PARENT|PROGRAM_USES_PARENT;    {
pike.git/src/post_modules/Nettle/cipher.cmod:2051:    *!    *! Returns the @[Cipher::State] object that this object    *! is to operate on.    *!    *! Defaults to creating the State for the cipher implemented    *! in the parent module.    */    PIKEFUN object(Nettle_Cipher_State) substate_factory()    flags ID_PROTECTED;    { -  apply_external(2, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(2, Nettle_BlockCipher_BufferedCipher_inh_offset +    Nettle_Cipher_State_program_fun_num, 0);    }       /*! @decl void create()    *!    *! Initialize the ABC state with the @[Cipher::State] object    *! returned by @[substate_factory()]. This is usually    *! the State for the cipher implemented in the parent module.    */    PIKEFUN void create()
pike.git/src/post_modules/Nettle/cipher.cmod:2359:    *! @seealso    *! @[CBC], @[GCM]    */    PIKEVAR object(Nettle_Cipher) CFB;       PIKECLASS _CFB    program_flags PROGRAM_NEEDS_PARENT|PROGRAM_USES_PARENT;    {    /*! @decl inherit BufferedCipher    */ -  INHERIT Nettle_BufferedCipher; +  INHERIT BufferedCipher;       /*! @decl string(0..255) name()    *! Returns the base cipher name appended with the string @expr{".CFB"@}.    */    PIKEFUN string(0..255) name()    optflags OPT_TRY_OPTIMIZE;    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_name_fun_num, args);    push_static_text(".CFB");    f_add(2);    }       PIKEFUN int(1..) block_size()    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_block_size_fun_num, args);    }       PIKEFUN int(1..) key_size()    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_key_size_fun_num, args);    }       PIKEFUN int(0..) iv_size()    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_block_size_fun_num, args);    }       /*! @class State    *!    *! The state for a CFB instance.    */    PIKECLASS State    program_flags PROGRAM_USES_PARENT|PROGRAM_NEEDS_PARENT;    {
pike.git/src/post_modules/Nettle/cipher.cmod:2447:    *!    *! Returns the @[Cipher::State] object that this object    *! is to operate on.    *!    *! Defaults to creating the State for the cipher implemented    *! in the parent module.    */    PIKEFUN object(Nettle_Cipher_State) substate_factory()    flags ID_PROTECTED;    { -  apply_external(2, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(2, Nettle_BlockCipher_BufferedCipher_inh_offset +    Nettle_Cipher_State_program_fun_num, 0);    }       /*! @decl void create()    *!    *! Initialize the CFB state with the @[Cipher::State] object    *! returned by @[substate_factory()]. This is usually    *! the State for the cipher implemented in the parent module.    */    PIKEFUN void create()
pike.git/src/post_modules/Nettle/cipher.cmod:2825:    /*! @decl inherit __builtin.Nettle.Cipher    */    INHERIT "__builtin.Nettle.Cipher";       /*! @decl string(0..255) name()    *! Returns the base cipher name appended with the string @expr{".CTR"@}.    */    PIKEFUN string(0..255) name()    optflags OPT_TRY_OPTIMIZE;    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_name_fun_num, args);    push_static_text(".CTR");    f_add(2);    }       PIKEFUN int(1..) block_size()    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_block_size_fun_num, args);    }       PIKEFUN int(1..) key_size()    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_key_size_fun_num, args);    }       PIKEFUN int(0..) iv_size()    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_block_size_fun_num, args);    }       /*! @class State    *!    *! The state for a CTR instance.    */    PIKECLASS State    program_flags PROGRAM_USES_PARENT|PROGRAM_NEEDS_PARENT|PROGRAM_CLEAR_STORAGE;    {
pike.git/src/post_modules/Nettle/cipher.cmod:2904:    *!    *! Returns the @[Cipher::State] object that this object    *! is to operate on.    *!    *! Defaults to creating the State for the cipher implemented    *! in the parent module.    */    PIKEFUN object(Nettle_Cipher_State) substate_factory()    flags ID_PROTECTED;    { -  apply_external(2, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(2, Nettle_BlockCipher_BufferedCipher_inh_offset +    Nettle_Cipher_State_program_fun_num, 0);    }       /*! @decl void create()    *!    *! Initialize the CTR state with the @[Cipher::State] object    *! returned by @[substate_factory()]. This is usually    *! the State for the cipher implemented in the parent module.    */    PIKEFUN void create()
pike.git/src/post_modules/Nettle/cipher.cmod:3188:    *! @seealso    *! @[CFB], @[CBC], @[CTR], @[GCM]    */    PIKEVAR object(Nettle_Cipher) OFB;       PIKECLASS _OFB    program_flags PROGRAM_NEEDS_PARENT|PROGRAM_USES_PARENT;    {    /*! @decl inherit BufferedCipher    */ -  INHERIT Nettle_BufferedCipher; +  INHERIT BufferedCipher;       /*! @decl string(0..255) name()    *! Returns the base cipher name appended with the string @expr{".OFB"@}.    */    PIKEFUN string(0..255) name()    optflags OPT_TRY_OPTIMIZE;    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_name_fun_num, args);    push_static_text(".OFB");    f_add(2);    }       PIKEFUN int(1..) block_size()    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_block_size_fun_num, args);    }       PIKEFUN int(1..) key_size()    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_key_size_fun_num, args);    }       PIKEFUN int(0..) iv_size()    { -  apply_external(1, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(1, Nettle_BlockCipher_BufferedCipher_inh_offset +    f_Nettle_Cipher_block_size_fun_num, args);    }       /*! @class State    *!    *! The state for a OFB instance.    */    PIKECLASS State    program_flags PROGRAM_USES_PARENT|PROGRAM_NEEDS_PARENT;    {
pike.git/src/post_modules/Nettle/cipher.cmod:3275:    *!    *! Returns the @[Cipher::State] object that this object    *! is to operate on.    *!    *! Defaults to creating the State for the cipher implemented    *! in the parent module.    */    PIKEFUN object(Nettle_Cipher_State) substate_factory()    flags ID_PROTECTED;    { -  apply_external(2, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(2, Nettle_BlockCipher_BufferedCipher_inh_offset +    Nettle_Cipher_State_program_fun_num, 0);    }       /*! @decl void create()    *!    *! Initialize the OFB state with the @[Cipher::State] object    *! returned by @[substate_factory()]. This is usually    *! the State for the cipher implemented in the parent module.    */    PIKEFUN void create()
pike.git/src/post_modules/Nettle/cipher.cmod:3608:    if (TYPEOF(Pike_sp[-1]) == T_OBJECT) {    add_ref(THIS_NETTLE_BLOCKCIPHER->OFB = Pike_sp[-1].u.object);    }    pop_stack();    }   }   /*! @endclass BlockCipher    */      #define BLOCKCIPHER_CIPHER_INHERIT (BUFFEREDCIPHER_CIPHER_INHERIT + \ -  Nettle_BlockCipher_Nettle_BufferedCipher_inh_num) +  Nettle_BlockCipher_BufferedCipher_inh_num)      /*! @class BlockCipher16    *!    *! This is the @[BlockCipher] class extended with algorithms    *! that require a block size of @expr{16@} bytes.    *!    *! @seealso    *! @[Cipher], @[BlockCipher], @[BufferedCipher], @[GCM]    */   PIKECLASS BlockCipher16   {    /* NOTE: MUST be first in the class to simplify access to symbols    * in Cipher!    */    /*! @decl inherit BlockCipher    */ -  INHERIT Nettle_BlockCipher; +  INHERIT BlockCipher;      #ifdef HAVE_NETTLE_GCM_H    PIKEVAR object(Nettle_AEAD) GCM;   #endif       /*! @module KW    *!    *! The AES Key Wrapping algorithm from @rfc{3394@}.    *!    *! This algorithm is intended to be used to encode
pike.git/src/post_modules/Nettle/cipher.cmod:3733:    *!    *! Returns the @[Cipher::State] object that this object    *! is to operate on.    *!    *! Defaults to creating the State for the cipher implemented    *! in the parent module.    */    PIKEFUN object(Nettle_Cipher_State) substate_factory()    flags ID_PROTECTED;    { -  apply_external(2, Nettle_BlockCipher_Nettle_BufferedCipher_inh_offset + +  apply_external(2, Nettle_BlockCipher_BufferedCipher_inh_offset +    Nettle_Cipher_State_program_fun_num, 0);    }       /*! @decl void create()    *!    *! Initialize the KW state with the @[Cipher::State] object    *! returned by @[substate_factory()]. This is usually    *! the State for the cipher implemented in the parent module.    */    PIKEFUN void create()
pike.git/src/post_modules/Nettle/cipher.cmod:5615:      /*! @class ARCTWO    *!    *! Implementation of the ARCTWO cipher.    *!    */   PIKECLASS ARCTWO   {    /*! @decl inherit BlockCipher    */ -  INHERIT Nettle_BlockCipher; +  INHERIT BlockCipher;       static const struct pike_cipher pike_arctwo =    _PIKE_CIPHER(arctwo, ARCTWO);       INIT    {    struct Nettle_Cipher_struct *cipher;    ASSIGN_CURRENT_STORAGE(cipher, struct Nettle_Cipher_struct,    BLOCKCIPHER_CIPHER_INHERIT + 1,    Nettle_Cipher_program);
pike.git/src/post_modules/Nettle/cipher.cmod:5977:    *! Implementation of the CHACHA stream cipher.    *!    *! @note    *! Note that this class is not available in all versions of Nettle.    *!    */   PIKECLASS CHACHA   {    /*! @decl inherit BlockCipher    */ -  INHERIT Nettle_BlockCipher; +  INHERIT BlockCipher;       static const struct pike_cipher pike_chacha =    _PIKE_CIPHER(chacha, CHACHA);       INIT    {    struct Nettle_Cipher_struct *cipher;    ASSIGN_CURRENT_STORAGE(cipher, struct Nettle_Cipher_struct,    BLOCKCIPHER_CIPHER_INHERIT + 1,    Nettle_Cipher_program);
pike.git/src/post_modules/Nettle/cipher.cmod:6141:      /*! @class DES    *!    *! Implementation of the Data Encryption Standard (DES) crypto algorithm.    *!    */   PIKECLASS DES   {    /*! @decl inherit BlockCipher    */ -  INHERIT Nettle_BlockCipher; +  INHERIT BlockCipher;       INIT    {    static const struct pike_cipher pike_des = _PIKE_CIPHER(des, DES);    /* FIXME: Ought to traverse the inherit graph for    * the current program.    */    struct Nettle_Cipher_struct *cipher;    ASSIGN_CURRENT_STORAGE(cipher, struct Nettle_Cipher_struct,    BLOCKCIPHER_CIPHER_INHERIT + 1,
pike.git/src/post_modules/Nettle/cipher.cmod:6362:      /*! @class DES3    *!    *! Implementation of the DES3 cipher algorithm.    *!    */   PIKECLASS DES3   {    /*! @decl inherit BlockCipher    */ -  INHERIT Nettle_BlockCipher; +  INHERIT BlockCipher;       INIT    {    static const struct pike_cipher pike_des3 = _PIKE_CIPHER(des3, DES3);    /* FIXME: Ought to traverse the inherit graph for    * the current program.    */    struct Nettle_Cipher_struct *cipher;    ASSIGN_CURRENT_STORAGE(cipher, struct Nettle_Cipher_struct,    BLOCKCIPHER_CIPHER_INHERIT + 1,
pike.git/src/post_modules/Nettle/cipher.cmod:6507:      /*! @class SALSA20    *!    *! Implementation of the SALSA20 cipher.    *!    */   PIKECLASS SALSA20   {    /*! @decl inherit BlockCipher    */ -  INHERIT Nettle_BlockCipher; +  INHERIT BlockCipher;       static const struct pike_cipher pike_salsa20 =    _PIKE_CIPHER(salsa20, SALSA20);       INIT    {    struct Nettle_Cipher_struct *cipher;    ASSIGN_CURRENT_STORAGE(cipher, struct Nettle_Cipher_struct,    BLOCKCIPHER_CIPHER_INHERIT + 1,    Nettle_Cipher_program);
pike.git/src/post_modules/Nettle/cipher.cmod:6605:      /*! @class SALSA20R12    *!    *! Implementation of the @[SALSA20] cipher reduced to 12 rounds.    *!    */   PIKECLASS SALSA20R12   {    /*! @decl inherit SALSA20    */ -  INHERIT Nettle_SALSA20; +  INHERIT SALSA20;       static const struct pike_cipher pike_salsa20r12 =    _PIKE_CIPHER(salsa20r12, SALSA20R12);       INIT    {    struct Nettle_Cipher_struct *cipher;    /* NB: We know that BlockCipher is the first inherit of SALSA20. */    ASSIGN_CURRENT_STORAGE(cipher, struct Nettle_Cipher_struct,    BLOCKCIPHER_CIPHER_INHERIT + 2,