evp_encryptinit.pod

来自「一个用于点对点传输加密的工具包源码」· POD 代码 · 共 360 行 · 第 1/2 页

POD
360
字号
=pod=head1 NAMEEVP_EncryptInit, EVP_EncryptUpdate, EVP_EncryptFinal, EVP_DecryptInit,EVP_DecryptUpdate, EVP_DecryptFinal, EVP_CipherInit, EVP_CipherUpdate,EVP_CipherFinal, EVP_CIPHER_CTX_set_key_length, EVP_CIPHER_CTX_ctrl,EVP_CIPHER_CTX_cleanup, 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 routines=head1 SYNOPSIS #include <openssl/evp.h> int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,         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(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_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,         int *outl, unsigned char *in, int inl); 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_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,         int *outl, unsigned char *in, int inl); int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm,         int *outl); 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_EncryptInit() initializes a cipher context B<ctx> for encryptionwith cipher B<type>. B<type> is normally supplied by a function suchas EVP_des_cbc() . B<key> is the symmetric key to use and B<iv> is theIV to use (if necessary), the actual number of bytes used for thekey and IV depends on the cipher. It is possible to set all parametersto NULL except B<type> in an initial call and supply the remainingparameters in subsequent calls, all of which have B<type> set to NULL.This is done when the default cipher parameters are not appropriate.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>.EVP_EncryptFinal() encrypts the "final" data, that is any data thatremains in a partial block. It uses L<standard block padding|/NOTES> (aka PKCSpadding). The encrypted final data is written to B<out> which shouldhave sufficient space for one cipher block. The number of bytes writtenis placed in B<outl>. After this function is called the encryption operationis finished and no further calls to EVP_EncryptUpdate() should be made.EVP_DecryptInit(), EVP_DecryptUpdate() and EVP_DecryptFinal() are thecorresponding decryption operations. EVP_DecryptFinal() will return anerror code if the final block is not correctly formatted. The parametersand restrictions are identical to the encryption operations except thatthe decrypted data buffer B<out> passed to EVP_DecryptUpdate() shouldhave sufficient room for (B<inl> + cipher_block_size) bytes unless thecipher block size is 1 in which case B<inl> bytes is sufficient.EVP_CipherInit(), EVP_CipherUpdate() and EVP_CipherFinal() are functionsthat can be used for decryption or encryption. The operation performeddepends on the value of the B<enc> parameter. It should be set to 1 forencryption, 0 for decryption and -1 to leave the value unchanged (theactual value of 'enc' being supplied in a previous call).EVP_CIPHER_CTX_cleanup() clears all information from a cipher context.It should be called after all operations using a cipher are completeso sensitive information does not remain in memory.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_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.

⌨️ 快捷键说明

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