1 /* 2 * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. 3 * 4 * Licensed under the Apache License 2.0 (the "License"). You may not use 5 * this file except in compliance with the License. You can obtain a copy 6 * in the file LICENSE in the source distribution or at 7 * https://www.openssl.org/source/license.html 8 */ 9 10 /* 11 * IDEA low level APIs are deprecated for public use, but still ok for internal 12 * use where we're using them to implement the higher level EVP interface, as is 13 * the case here. 14 */ 15 #include "internal/deprecated.h" 16 17 #include <openssl/idea.h> 18 #include "idea_local.h" 19 20 /* 21 * The input and output encrypted as though 64bit cfb mode is being used. 22 * The extra state information to record how much of the 64bit block we have 23 * used is contained in *num; 24 */ 25 26 void IDEA_cfb64_encrypt(const unsigned char *in, unsigned char *out, 27 long length, IDEA_KEY_SCHEDULE *schedule, 28 unsigned char *ivec, int *num, int encrypt) 29 { 30 register unsigned long v0, v1, t; 31 register int n = *num; 32 register long l = length; 33 unsigned long ti[2]; 34 unsigned char *iv, c, cc; 35 36 if (n < 0) { 37 *num = -1; 38 return; 39 } 40 41 iv = (unsigned char *)ivec; 42 if (encrypt) { 43 while (l--) { 44 if (n == 0) { 45 n2l(iv, v0); 46 ti[0] = v0; 47 n2l(iv, v1); 48 ti[1] = v1; 49 IDEA_encrypt((unsigned long *)ti, schedule); 50 iv = (unsigned char *)ivec; 51 t = ti[0]; 52 l2n(t, iv); 53 t = ti[1]; 54 l2n(t, iv); 55 iv = (unsigned char *)ivec; 56 } 57 c = *(in++) ^ iv[n]; 58 *(out++) = c; 59 iv[n] = c; 60 n = (n + 1) & 0x07; 61 } 62 } else { 63 while (l--) { 64 if (n == 0) { 65 n2l(iv, v0); 66 ti[0] = v0; 67 n2l(iv, v1); 68 ti[1] = v1; 69 IDEA_encrypt((unsigned long *)ti, schedule); 70 iv = (unsigned char *)ivec; 71 t = ti[0]; 72 l2n(t, iv); 73 t = ti[1]; 74 l2n(t, iv); 75 iv = (unsigned char *)ivec; 76 } 77 cc = *(in++); 78 c = iv[n]; 79 iv[n] = cc; 80 *(out++) = c ^ cc; 81 n = (n + 1) & 0x07; 82 } 83 } 84 v0 = v1 = ti[0] = ti[1] = t = c = cc = 0; 85 *num = n; 86 } 87