if (key) {
struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx);
unsigned char cipher_key[32];
+ int ret;
c->omac_ctx = EVP_MD_CTX_new();
if (c->omac_ctx == NULL) {
return 0;
}
- return magma_cipher_init(ctx, cipher_key, iv, enc);
+ ret = magma_cipher_init(ctx, cipher_key, iv, enc);
+ OPENSSL_cleanse(cipher_key, sizeof(cipher_key));
+ return ret;
}
return magma_cipher_init(ctx, key, iv, enc);
memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), adjusted_iv, 8);
magma_key(c, newkey);
+ OPENSSL_cleanse(newkey, sizeof(newkey));
return 1;
}
}
&c->buffer);
}
gost_grasshopper_cipher_key(c, newkey);
+ OPENSSL_cleanse(newkey, sizeof(newkey));
}
/* Set 256 bit key into context */
if (key) {
unsigned char cipher_key[32];
+ int ret;
c->omac_ctx = EVP_MD_CTX_new();
if (c->omac_ctx == NULL) {
return 0;
}
- return gost_grasshopper_cipher_init(ctx, cipher_key, iv, enc);
+ ret = gost_grasshopper_cipher_init(ctx, cipher_key, iv, enc);
+ OPENSSL_cleanse(cipher_key, sizeof(cipher_key));
+ return ret;
}
return gost_grasshopper_cipher_init(ctx, key, iv, enc);
memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), adjusted_iv, 16);
gost_grasshopper_cipher_key(c, newkey);
+ OPENSSL_cleanse(newkey, sizeof(newkey));
return 1;
}
}
uint64_t seed1, seed2, seed3;
uint64_t seq;
unsigned char ko1[32], ko2[32];
+ int ret;
switch (cipher_nid) {
case NID_magma_cbc:
seed2 = seq & c2;
seed3 = seq & c3;
- if (gost_kdftree2012_256(ko1, 32, in, 32, (const unsigned char *)"level1", 6,
+ ret = !(gost_kdftree2012_256(ko1, 32, in, 32, (const unsigned char *)"level1", 6,
(const unsigned char *)&seed1, 8, 1) <= 0
|| gost_kdftree2012_256(ko2, 32, ko1, 32, (const unsigned char *)"level2", 6,
(const unsigned char *)&seed2, 8, 1) <= 0
|| gost_kdftree2012_256(out, 32, ko2, 32, (const unsigned char *)"level3", 6,
- (const unsigned char *)&seed3, 8, 1) <= 0)
- return 0;
+ (const unsigned char *)&seed3, 8, 1) <= 0);
- return 1;
+ OPENSSL_cleanse(ko1, sizeof(ko1));
+ OPENSSL_cleanse(ko2, sizeof(ko2));
+ return ret;
}
#define GOST_WRAP_FLAGS EVP_CIPH_CTRL_INIT | EVP_CIPH_WRAP_MODE | EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER | EVP_CIPH_FLAG_DEFAULT_ASN1
|| (cipher = EVP_CIPHER_fetch(NULL, c->cipher_name, NULL)))
ret = omac_key(c, cipher, diversed_key, 32);
EVP_CIPHER_free(cipher);
+ OPENSSL_cleanse(diversed_key, sizeof(diversed_key));
}
return ret;
}