+#ifndef DISABLE_LEGACY
+bool init_crypto_by_nid(legacy_crypto_t *c, int cipher, int digest) {
+ if(!cipher_open_by_nid(&c->cipher, cipher)) {
+ return false;
+ }
+
+ if(!digest_open_by_nid(&c->digest, digest, DIGEST_ALGO_SIZE)) {
+ cipher_close(&c->cipher);
+ return false;
+ }
+
+ c->budget = cipher_budget(&c->cipher);
+ return true;
+}
+
+bool init_crypto_by_name(legacy_crypto_t *c, const char *cipher, const char *digest) {
+ if(!cipher_open_by_name(&c->cipher, cipher)) {
+ return false;
+ }
+
+ if(!digest_open_by_name(&c->digest, digest, DIGEST_ALGO_SIZE)) {
+ cipher_close(&c->cipher);
+ return false;
+ }
+
+ c->budget = cipher_budget(&c->cipher);
+ return true;
+}
+
+bool decrease_budget(legacy_crypto_t *c, size_t bytes) {
+ if(bytes > c->budget) {
+ return false;
+ } else {
+ c->budget -= bytes;
+ return true;
+ }
+}
+
+static void close_legacy_crypto(legacy_crypto_t *c) {
+ cipher_close(&c->cipher);
+ digest_close(&c->digest);
+}
+
+legacy_ctx_t *new_legacy_ctx(rsa_t *rsa) {
+ legacy_ctx_t *ctx = xzalloc(sizeof(legacy_ctx_t));
+ ctx->rsa = rsa;
+ return ctx;
+}
+
+void free_legacy_ctx(legacy_ctx_t *ctx) {
+ if(ctx) {
+ close_legacy_crypto(&ctx->in);
+ close_legacy_crypto(&ctx->out);
+ rsa_free(ctx->rsa);
+ free(ctx);
+ }
+}
+#endif
+