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

📄 evp_encryptinit.pod

📁 开源的ssl算法openssl,版本0.9.8H
💻 POD
📖 第 1 页 / 共 2 页
字号:
=pod=head1 NAMEEVP_CIPHER_CTX_init, EVP_EncryptInit_ex, EVP_EncryptUpdate,EVP_EncryptFinal_ex, EVP_DecryptInit_ex, EVP_DecryptUpdate,EVP_DecryptFinal_ex, EVP_CipherInit_ex, EVP_CipherUpdate,EVP_CipherFinal_ex, EVP_CIPHER_CTX_set_key_length,EVP_CIPHER_CTX_ctrl, EVP_CIPHER_CTX_cleanup, EVP_EncryptInit,EVP_EncryptFinal, EVP_DecryptInit, EVP_DecryptFinal,EVP_CipherInit, EVP_CipherFinal, EVP_get_cipherbyname,EVP_get_cipherbynid, EVP_get_cipherbyobj, EVP_CIPHER_nid,EVP_CIPHER_block_size, EVP_CIPHER_key_length, EVP_CIPHER_iv_length,EVP_CIPHER_flags, EVP_CIPHER_mode, EVP_CIPHER_type, EVP_CIPHER_CTX_cipher,EVP_CIPHER_CTX_nid, EVP_CIPHER_CTX_block_size, EVP_CIPHER_CTX_key_length,EVP_CIPHER_CTX_iv_length, EVP_CIPHER_CTX_get_app_data,EVP_CIPHER_CTX_set_app_data, EVP_CIPHER_CTX_type, EVP_CIPHER_CTX_flags,EVP_CIPHER_CTX_mode, EVP_CIPHER_param_to_asn1, EVP_CIPHER_asn1_to_param,EVP_CIPHER_CTX_set_padding - EVP cipher routines=head1 SYNOPSIS #include <openssl/evp.h> void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a); int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,	 ENGINE *impl, unsigned char *key, unsigned char *iv); int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,         int *outl, unsigned char *in, int inl); int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out,         int *outl); int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,	 ENGINE *impl, unsigned char *key, unsigned char *iv); int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,         int *outl, unsigned char *in, int inl); int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm,         int *outl); int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,         ENGINE *impl, unsigned char *key, unsigned char *iv, int enc); int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,         int *outl, unsigned char *in, int inl); int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm,         int *outl); int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,         unsigned char *key, unsigned char *iv); int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out,         int *outl); int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,         unsigned char *key, unsigned char *iv); int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm,         int *outl); int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,         unsigned char *key, unsigned char *iv, int enc); int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm,         int *outl); int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *x, int padding); int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a); const EVP_CIPHER *EVP_get_cipherbyname(const char *name); #define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a)) #define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a)) #define EVP_CIPHER_nid(e)		((e)->nid) #define EVP_CIPHER_block_size(e)	((e)->block_size) #define EVP_CIPHER_key_length(e)	((e)->key_len) #define EVP_CIPHER_iv_length(e)		((e)->iv_len) #define EVP_CIPHER_flags(e)		((e)->flags) #define EVP_CIPHER_mode(e)		((e)->flags) & EVP_CIPH_MODE) int EVP_CIPHER_type(const EVP_CIPHER *ctx); #define EVP_CIPHER_CTX_cipher(e)	((e)->cipher) #define EVP_CIPHER_CTX_nid(e)		((e)->cipher->nid) #define EVP_CIPHER_CTX_block_size(e)	((e)->cipher->block_size) #define EVP_CIPHER_CTX_key_length(e)	((e)->key_len) #define EVP_CIPHER_CTX_iv_length(e)	((e)->cipher->iv_len) #define EVP_CIPHER_CTX_get_app_data(e)	((e)->app_data) #define EVP_CIPHER_CTX_set_app_data(e,d) ((e)->app_data=(char *)(d)) #define EVP_CIPHER_CTX_type(c)         EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c)) #define EVP_CIPHER_CTX_flags(e)		((e)->cipher->flags) #define EVP_CIPHER_CTX_mode(e)		((e)->cipher->flags & EVP_CIPH_MODE) int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type); int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type);=head1 DESCRIPTIONThe EVP cipher routines are a high level interface to certainsymmetric ciphers.EVP_CIPHER_CTX_init() initializes cipher contex B<ctx>.EVP_EncryptInit_ex() sets up cipher context B<ctx> for encryptionwith cipher B<type> from ENGINE B<impl>. B<ctx> must be initializedbefore calling this function. B<type> is normally suppliedby a function such as EVP_des_cbc(). If B<impl> is NULL then thedefault implementation is used. B<key> is the symmetric key to useand B<iv> is the IV to use (if necessary), the actual number of bytesused for the key and IV depends on the cipher. It is possible to setall parameters to NULL except B<type> in an initial call and supplythe remaining parameters in subsequent calls, all of which have B<type>set to NULL. This is done when the default cipher parameters are notappropriate.EVP_EncryptUpdate() encrypts B<inl> bytes from the buffer B<in> andwrites the encrypted version to B<out>. This function can be calledmultiple times to encrypt successive blocks of data. The amountof data written depends on the block alignment of the encrypted data:as a result the amount of data written may be anything from zero bytesto (inl + cipher_block_size - 1) so B<outl> should contain sufficientroom. The actual number of bytes written is placed in B<outl>.If padding is enabled (the default) then EVP_EncryptFinal_ex() encryptsthe "final" data, that is any data that remains in a partial block.It uses L<standard block padding|/NOTES> (aka PKCS padding). The encryptedfinal data is written to B<out> which should have sufficient space forone cipher block. The number of bytes written is placed in B<outl>. Afterthis function is called the encryption operation is finished and no furthercalls to EVP_EncryptUpdate() should be made.If padding is disabled then EVP_EncryptFinal_ex() will not encrypt any moredata and it will return an error if any data remains in a partial block:that is if the total data length is not a multiple of the block size. EVP_DecryptInit_ex(), EVP_DecryptUpdate() and EVP_DecryptFinal_ex() are thecorresponding decryption operations. EVP_DecryptFinal() will return anerror code if padding is enabled and the final block is not correctlyformatted. The parameters and restrictions are identical to the encryptionoperations except that if padding is enabled the decrypted data buffer B<out>passed to EVP_DecryptUpdate() should have sufficient room for(B<inl> + cipher_block_size) bytes unless the cipher block size is 1 inwhich case B<inl> bytes is sufficient.EVP_CipherInit_ex(), EVP_CipherUpdate() and EVP_CipherFinal_ex() arefunctions that can be used for decryption or encryption. The operationperformed depends on the value of the B<enc> parameter. It should be setto 1 for encryption, 0 for decryption and -1 to leave the value unchanged(the actual value of 'enc' being supplied in a previous call).EVP_CIPHER_CTX_cleanup() clears all information from a cipher contextand free up any allocated memory associate with it. It should be calledafter all operations using a cipher are complete so sensitive informationdoes not remain in memory.EVP_EncryptInit(), EVP_DecryptInit() and EVP_CipherInit() behave in asimilar way to EVP_EncryptInit_ex(), EVP_DecryptInit_ex andEVP_CipherInit_ex() except the B<ctx> paramter does not need to beinitialized and they always use the default cipher implementation.EVP_EncryptFinal(), EVP_DecryptFinal() and EVP_CipherFinal() behave in asimilar way to EVP_EncryptFinal_ex(), EVP_DecryptFinal_ex() andEVP_CipherFinal_ex() except B<ctx> is automatically cleaned up after the call.EVP_get_cipherbyname(), EVP_get_cipherbynid() and EVP_get_cipherbyobj()return an EVP_CIPHER structure when passed a cipher name, a NID or anASN1_OBJECT structure.EVP_CIPHER_nid() and EVP_CIPHER_CTX_nid() return the NID of a cipher whenpassed an B<EVP_CIPHER> or B<EVP_CIPHER_CTX> structure.  The actual NIDvalue is an internal value which may not have a corresponding OBJECTIDENTIFIER.EVP_CIPHER_CTX_set_padding() enables or disables padding. By defaultencryption operations are padded using standard block padding and thepadding is checked and removed when decrypting. If the B<pad> parameteris zero then no padding is performed, the total amount of data encryptedor decrypted must then be a multiple of the block size or an error willoccur.EVP_CIPHER_key_length() and EVP_CIPHER_CTX_key_length() return the keylength of a cipher when passed an B<EVP_CIPHER> or B<EVP_CIPHER_CTX>structure. The constant B<EVP_MAX_KEY_LENGTH> is the maximum key lengthfor all ciphers. Note: although EVP_CIPHER_key_length() is fixed for agiven cipher, the value of EVP_CIPHER_CTX_key_length() may be differentfor variable key length ciphers.EVP_CIPHER_CTX_set_key_length() sets the key length of the cipher ctx.If the cipher is a fixed length cipher then attempting to set the keylength to any value other than the fixed value is an error.EVP_CIPHER_iv_length() and EVP_CIPHER_CTX_iv_length() return the IVlength of a cipher when passed an B<EVP_CIPHER> or B<EVP_CIPHER_CTX>.It will return zero if the cipher does not use an IV.  The constantB<EVP_MAX_IV_LENGTH> is the maximum IV length for all ciphers.EVP_CIPHER_block_size() and EVP_CIPHER_CTX_block_size() return the blocksize of a cipher when passed an B<EVP_CIPHER> or B<EVP_CIPHER_CTX>structure. The constant B<EVP_MAX_IV_LENGTH> is also the maximum blocklength for all ciphers.EVP_CIPHER_type() and EVP_CIPHER_CTX_type() return the type of the passedcipher or context. This "type" is the actual NID of the cipher OBJECTIDENTIFIER as such it ignores the cipher parameters and 40 bit RC2 and128 bit RC2 have the same NID. If the cipher does not have an objectidentifier or does not have ASN1 support this function will returnB<NID_undef>.EVP_CIPHER_CTX_cipher() returns the B<EVP_CIPHER> structure when passedan B<EVP_CIPHER_CTX> structure.EVP_CIPHER_mode() and EVP_CIPHER_CTX_mode() return the block cipher mode:EVP_CIPH_ECB_MODE, EVP_CIPH_CBC_MODE, EVP_CIPH_CFB_MODE orEVP_CIPH_OFB_MODE. If the cipher is a stream cipher thenEVP_CIPH_STREAM_CIPHER is returned.EVP_CIPHER_param_to_asn1() sets the AlgorithmIdentifier "parameter" basedon the passed cipher. This will typically include any parameters and anIV. The cipher IV (if any) must be set when this call is made. This callshould be made before the cipher is actually "used" (before anyEVP_EncryptUpdate(), EVP_DecryptUpdate() calls for example). This functionmay fail if the cipher does not have any ASN1 support.EVP_CIPHER_asn1_to_param() sets the cipher parameters based on an ASN1AlgorithmIdentifier "parameter". The precise effect depends on the cipherIn the case of RC2, for example, it will set the IV and effective key length.This function should be called after the base cipher type is set but beforethe key is set. For example EVP_CipherInit() will be called with the IV andkey set to NULL, EVP_CIPHER_asn1_to_param() will be called and finallyEVP_CipherInit() again with all parameters except the key set to NULL. It ispossible for this function to fail if the cipher does not have any ASN1 supportor the parameters cannot be set (for example the RC2 effective key lengthis not supported.EVP_CIPHER_CTX_ctrl() allows various cipher specific parameters to be determinedand set. Currently only the RC2 effective key length and the number of rounds ofRC5 can be set.=head1 RETURN VALUESEVP_EncryptInit_ex(), EVP_EncryptUpdate() and EVP_EncryptFinal_ex()return 1 for success and 0 for failure.EVP_DecryptInit_ex() and EVP_DecryptUpdate() return 1 for success and 0 for failure.EVP_DecryptFinal_ex() returns 0 if the decrypt failed or 1 for success.EVP_CipherInit_ex() and EVP_CipherUpdate() return 1 for success and 0 for failure.EVP_CipherFinal_ex() returns 0 for a decryption failure or 1 for success.EVP_CIPHER_CTX_cleanup() returns 1 for success and 0 for failure.EVP_get_cipherbyname(), EVP_get_cipherbynid() and EVP_get_cipherbyobj()return an B<EVP_CIPHER> structure or NULL on error.EVP_CIPHER_nid() and EVP_CIPHER_CTX_nid() return a NID.EVP_CIPHER_block_size() and EVP_CIPHER_CTX_block_size() return the blocksize.

⌨️ 快捷键说明

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