source: EcnlProtoTool/trunk/openssl-1.1.0e/crypto/modes/ofb128.c@ 331

Last change on this file since 331 was 331, checked in by coas-nagasima, 6 years ago

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc
File size: 2.1 KB
Line 
1/*
2 * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved.
3 *
4 * Licensed under the OpenSSL license (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#include <openssl/crypto.h>
11#include "modes_lcl.h"
12#include <string.h>
13
14/*
15 * The input and output encrypted as though 128bit ofb mode is being used.
16 * The extra state information to record how much of the 128bit block we have
17 * used is contained in *num;
18 */
19void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out,
20 size_t len, const void *key,
21 unsigned char ivec[16], int *num, block128_f block)
22{
23 unsigned int n;
24 size_t l = 0;
25
26 n = *num;
27
28#if !defined(OPENSSL_SMALL_FOOTPRINT)
29 if (16 % sizeof(size_t) == 0) { /* always true actually */
30 do {
31 while (n && len) {
32 *(out++) = *(in++) ^ ivec[n];
33 --len;
34 n = (n + 1) % 16;
35 }
36# if defined(STRICT_ALIGNMENT)
37 if (((size_t)in | (size_t)out | (size_t)ivec) % sizeof(size_t) !=
38 0)
39 break;
40# endif
41 while (len >= 16) {
42 (*block) (ivec, ivec, key);
43 for (; n < 16; n += sizeof(size_t))
44 *(size_t *)(out + n) =
45 *(size_t *)(in + n) ^ *(size_t *)(ivec + n);
46 len -= 16;
47 out += 16;
48 in += 16;
49 n = 0;
50 }
51 if (len) {
52 (*block) (ivec, ivec, key);
53 while (len--) {
54 out[n] = in[n] ^ ivec[n];
55 ++n;
56 }
57 }
58 *num = n;
59 return;
60 } while (0);
61 }
62 /* the rest would be commonly eliminated by x86* compiler */
63#endif
64 while (l < len) {
65 if (n == 0) {
66 (*block) (ivec, ivec, key);
67 }
68 out[l] = in[l] ^ ivec[n];
69 ++l;
70 n = (n + 1) % 16;
71 }
72
73 *num = n;
74}
Note: See TracBrowser for help on using the repository browser.