summaryrefslogtreecommitdiff
path: root/cipher.c
diff options
context:
space:
mode:
authorTim Rice <tim@multitalents.net>2002-03-22 13:27:40 -0800
committerTim Rice <tim@multitalents.net>2002-03-22 13:27:40 -0800
commitf29a6539c06a7fb60da79eba861fc61b13d6e793 (patch)
treed4795a2ab1ec73f0e29bd89327ee14f51dda68fc /cipher.c
parent4435a55a4ba0faa25f39aa883aac9d7d964a1858 (diff)
[cipher.c] fix problem with OpenBSD sync
Diffstat (limited to 'cipher.c')
-rw-r--r--cipher.c76
1 files changed, 38 insertions, 38 deletions
diff --git a/cipher.c b/cipher.c
index b899fcd22..a9ca99cd7 100644
--- a/cipher.c
+++ b/cipher.c
@@ -507,6 +507,44 @@ ssh_rijndael_cbc(EVP_CIPHER_CTX *ctx, u_char *dest, const u_char *src,
507 for (i = blocks; i > 0; i--, cnow-=RIJNDAEL_BLOCKSIZE, 507 for (i = blocks; i > 0; i--, cnow-=RIJNDAEL_BLOCKSIZE,
508 plain-=RIJNDAEL_BLOCKSIZE) { 508 plain-=RIJNDAEL_BLOCKSIZE) {
509 rijndael_decrypt(&c->r_ctx, cnow, plain); 509 rijndael_decrypt(&c->r_ctx, cnow, plain);
510 ivp = (i == 1) ? c->r_iv : cnow-RIJNDAEL_BLOCKSIZE;
511 for (j = 0; j < RIJNDAEL_BLOCKSIZE; j++)
512 plain[j] ^= ivp[j];
513 }
514 memcpy(c->r_iv, buf, RIJNDAEL_BLOCKSIZE);
515 }
516 return (1);
517}
518static int
519ssh_rijndael_cleanup(EVP_CIPHER_CTX *ctx)
520{
521 struct ssh_rijndael_ctx *c;
522
523 if ((c = EVP_CIPHER_CTX_get_app_data(ctx)) != NULL) {
524 memset(c, 0, sizeof(*c));
525 xfree(c);
526 EVP_CIPHER_CTX_set_app_data(ctx, NULL);
527 }
528 return (1);
529}
530static EVP_CIPHER *
531evp_rijndael(void)
532{
533 static EVP_CIPHER rijndal_cbc;
534
535 memset(&rijndal_cbc, 0, sizeof(EVP_CIPHER));
536 rijndal_cbc.nid = NID_undef;
537 rijndal_cbc.block_size = RIJNDAEL_BLOCKSIZE;
538 rijndal_cbc.iv_len = RIJNDAEL_BLOCKSIZE;
539 rijndal_cbc.key_len = 16;
540 rijndal_cbc.init = ssh_rijndael_init;
541 rijndal_cbc.cleanup = ssh_rijndael_cleanup;
542 rijndal_cbc.do_cipher = ssh_rijndael_cbc;
543#ifndef SSH_OLD_EVP
544 rijndal_cbc.flags = EVP_CIPH_CBC_MODE | EVP_CIPH_VARIABLE_LENGTH |
545 EVP_CIPH_ALWAYS_CALL_INIT;
546#endif
547 return (&rijndal_cbc);
510} 548}
511 549
512/* 550/*
@@ -675,42 +713,4 @@ cipher_set_keycontext(CipherContext *cc, u_char *dat)
675 plen = EVP_X_STATE_LEN(cc->evp); 713 plen = EVP_X_STATE_LEN(cc->evp);
676 memcpy(EVP_X_STATE(cc->evp), dat, plen); 714 memcpy(EVP_X_STATE(cc->evp), dat, plen);
677 } 715 }
678 ivp = (i == 1) ? c->r_iv : cnow-RIJNDAEL_BLOCKSIZE;
679 for (j = 0; j < RIJNDAEL_BLOCKSIZE; j++)
680 plain[j] ^= ivp[j];
681 }
682 memcpy(c->r_iv, buf, RIJNDAEL_BLOCKSIZE);
683 }
684 return (1);
685}
686static int
687ssh_rijndael_cleanup(EVP_CIPHER_CTX *ctx)
688{
689 struct ssh_rijndael_ctx *c;
690
691 if ((c = EVP_CIPHER_CTX_get_app_data(ctx)) != NULL) {
692 memset(c, 0, sizeof(*c));
693 xfree(c);
694 EVP_CIPHER_CTX_set_app_data(ctx, NULL);
695 }
696 return (1);
697}
698static EVP_CIPHER *
699evp_rijndael(void)
700{
701 static EVP_CIPHER rijndal_cbc;
702
703 memset(&rijndal_cbc, 0, sizeof(EVP_CIPHER));
704 rijndal_cbc.nid = NID_undef;
705 rijndal_cbc.block_size = RIJNDAEL_BLOCKSIZE;
706 rijndal_cbc.iv_len = RIJNDAEL_BLOCKSIZE;
707 rijndal_cbc.key_len = 16;
708 rijndal_cbc.init = ssh_rijndael_init;
709 rijndal_cbc.cleanup = ssh_rijndael_cleanup;
710 rijndal_cbc.do_cipher = ssh_rijndael_cbc;
711#ifndef SSH_OLD_EVP
712 rijndal_cbc.flags = EVP_CIPH_CBC_MODE | EVP_CIPH_VARIABLE_LENGTH |
713 EVP_CIPH_ALWAYS_CALL_INIT;
714#endif
715 return (&rijndal_cbc);
716} 716}