diff --git a/AUTHORS b/AUTHORS index ad3a8ae..11824c4 100644 --- a/AUTHORS +++ b/AUTHORS @@ -19,4 +19,5 @@ Scott Kidder Space Monkey, Inc Stephen Gallagher Viacheslav Biriukov -Zack Owens \ No newline at end of file +Zack Owens +Ramesh Rayaprolu diff --git a/ciphers.go b/ciphers.go index e4f5771..eab555f 100644 --- a/ciphers.go +++ b/ciphers.go @@ -148,6 +148,13 @@ func (ctx *cipherCtx) IVSize() int { return int(C.X_EVP_CIPHER_CTX_iv_length(ctx.ctx)) } +func (ctx *cipherCtx) SetPadding(pad bool) { + if pad { + C.X_EVP_CIPHER_CTX_set_padding(ctx.ctx, 1) + } + C.X_EVP_CIPHER_CTX_set_padding(ctx.ctx, 0) +} + func (ctx *cipherCtx) setCtrl(code, arg int) error { res := C.EVP_CIPHER_CTX_ctrl(ctx.ctx, C.int(code), C.int(arg), nil) if res != 1 { diff --git a/shim.c b/shim.c index 08cd51a..edf440c 100644 --- a/shim.c +++ b/shim.c @@ -664,6 +664,12 @@ int X_EVP_CIPHER_CTX_iv_length(EVP_CIPHER_CTX *ctx) { return EVP_CIPHER_CTX_iv_length(ctx); } +void X_EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *ctx, int padding) { + //openssl always returns 1 for set_padding + //hence return value is not checked + EVP_CIPHER_CTX_set_padding(ctx, padding); +} + const EVP_CIPHER *X_EVP_CIPHER_CTX_cipher(EVP_CIPHER_CTX *ctx) { return EVP_CIPHER_CTX_cipher(ctx); } diff --git a/shim.h b/shim.h index 0dfdcec..14c2414 100644 --- a/shim.h +++ b/shim.h @@ -139,6 +139,7 @@ extern int X_EVP_CIPHER_nid(EVP_CIPHER *c); extern int X_EVP_CIPHER_CTX_block_size(EVP_CIPHER_CTX *ctx); extern int X_EVP_CIPHER_CTX_key_length(EVP_CIPHER_CTX *ctx); extern int X_EVP_CIPHER_CTX_iv_length(EVP_CIPHER_CTX *ctx); +extern void X_EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *ctx, int padding); extern const EVP_CIPHER *X_EVP_CIPHER_CTX_cipher(EVP_CIPHER_CTX *ctx); extern int X_EVP_CIPHER_CTX_encrypting(const EVP_CIPHER_CTX *ctx); extern int X_EVP_PKEY_CTX_set_ec_paramgen_curve_nid(EVP_PKEY_CTX *ctx, int nid); @@ -159,4 +160,4 @@ extern int X_sk_X509_num(STACK_OF(X509) *sk); extern X509 *X_sk_X509_value(STACK_OF(X509)* sk, int i); /* PEM methods */ -extern int X_PEM_write_bio_PrivateKey_traditional(BIO *bio, EVP_PKEY *key, const EVP_CIPHER *enc, unsigned char *kstr, int klen, pem_password_cb *cb, void *u); \ No newline at end of file +extern int X_PEM_write_bio_PrivateKey_traditional(BIO *bio, EVP_PKEY *key, const EVP_CIPHER *enc, unsigned char *kstr, int klen, pem_password_cb *cb, void *u);