  void clear() {
    if (ctx_pktlen_) {
      EVP_CIPHER_CTX_cleanup(ctx_pktlen_);
      EVP_CIPHER_CTX_free(ctx_pktlen_);
      ctx_pktlen_ = nullptr;
    }
    if (ctx_main_) {
      EVP_CIPHER_CTX_cleanup(ctx_main_);
      EVP_CIPHER_CTX_free(ctx_main_);
      ctx_main_ = nullptr;
    }
    if (polykey_) {
      EVP_PKEY_free(polykey_);
      polykey_ = nullptr;
    }
    if (md_ctx_) {
      EVP_MD_CTX_free(md_ctx_);
      md_ctx_ = nullptr;
    }
    // `polykey_ctx_` is not explicitly freed as it is freed implicitly when
    // `md_ctx_` is freed
  }
  void clear() {
    if (ctx_pktlen_) {
      EVP_CIPHER_CTX_cleanup(ctx_pktlen_);
      EVP_CIPHER_CTX_free(ctx_pktlen_);
      ctx_pktlen_ = nullptr;
    }
    if (ctx_main_) {
      EVP_CIPHER_CTX_cleanup(ctx_main_);
      EVP_CIPHER_CTX_free(ctx_main_);
      ctx_main_ = nullptr;
    }
    if (polykey_) {
      EVP_PKEY_free(polykey_);
      polykey_ = nullptr;
    }
    if (md_ctx_) {
      EVP_MD_CTX_free(md_ctx_);
      md_ctx_ = nullptr;
    }
     
     
  }