Add SEED ciphers to default provider
authorShane Lontis <shane.lontis@oracle.com>
Wed, 18 Sep 2019 12:13:59 +0000 (22:13 +1000)
committerShane Lontis <shane.lontis@oracle.com>
Wed, 18 Sep 2019 12:13:59 +0000 (22:13 +1000)
Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/9932)

crypto/evp/evp_enc.c
providers/common/include/internal/provider_algs.h
providers/default/ciphers/build.info
providers/default/ciphers/cipher_seed.c [new file with mode: 0644]
providers/default/ciphers/cipher_seed.h [new file with mode: 0644]
providers/default/ciphers/cipher_seed_hw.c [new file with mode: 0644]
providers/default/defltprov.c
test/recipes/30-test_evp.t
test/recipes/30-test_evp_data/evpciph.txt
test/recipes/30-test_evp_data/evpciph_seed.txt [new file with mode: 0644]

index 383480b..4d60016 100644 (file)
@@ -243,6 +243,10 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
         case NID_cast5_ecb:
         case NID_cast5_cfb64:
         case NID_cast5_ofb64:
+        case NID_seed_cbc:
+        case NID_seed_ecb:
+        case NID_seed_cfb128:
+        case NID_seed_ofb128:
             break;
         default:
             goto legacy;
index 560a967..d69b9cd 100644 (file)
@@ -134,6 +134,12 @@ extern const OSSL_DISPATCH cast5128cbc_functions[];
 extern const OSSL_DISPATCH cast564ofb64_functions[];
 extern const OSSL_DISPATCH cast564cfb64_functions[];
 #endif /* OPENSSL_NO_CAST */
+#ifndef OPENSSL_NO_SEED
+extern const OSSL_DISPATCH seed128ecb_functions[];
+extern const OSSL_DISPATCH seed128cbc_functions[];
+extern const OSSL_DISPATCH seed128ofb128_functions[];
+extern const OSSL_DISPATCH seed128cfb128_functions[];
+#endif /* OPENSSL_NO_SEED */
 
 extern const OSSL_DISPATCH tdes_ede3_ecb_functions[];
 extern const OSSL_DISPATCH tdes_ede3_cbc_functions[];
index 05e4555..66ef9df 100644 (file)
@@ -34,4 +34,9 @@ IF[{- !$disabled{cast} -}]
       cipher_cast5.c cipher_cast5_hw.c
 ENDIF
 
+IF[{- !$disabled{seed} -}]
+  SOURCE[../../../libcrypto]=\
+      cipher_seed.c cipher_seed_hw.c
+ENDIF
+
 INCLUDE[../../../libcrypto]=. ../../../crypto
diff --git a/providers/default/ciphers/cipher_seed.c b/providers/default/ciphers/cipher_seed.c
new file mode 100644 (file)
index 0000000..5dfa648
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/* Dispatch functions for Seed cipher modes ecb, cbc, ofb, cfb */
+
+#include "cipher_seed.h"
+#include "internal/provider_algs.h"
+
+/* TODO (3.0) Figure out what flags are required */
+#define SEED_FLAGS EVP_CIPH_FLAG_DEFAULT_ASN1
+
+static OSSL_OP_cipher_freectx_fn seed_freectx;
+static OSSL_OP_cipher_dupctx_fn seed_dupctx;
+
+static void seed_freectx(void *vctx)
+{
+    PROV_SEED_CTX *ctx = (PROV_SEED_CTX *)vctx;
+
+    OPENSSL_clear_free(ctx,  sizeof(*ctx));
+}
+
+static void *seed_dupctx(void *ctx)
+{
+    PROV_SEED_CTX *in = (PROV_SEED_CTX *)ctx;
+    PROV_SEED_CTX *ret = OPENSSL_malloc(sizeof(*ret));
+
+    if (ret == NULL) {
+        ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE);
+        return NULL;
+    }
+    *ret = *in;
+
+    return ret;
+}
+
+/* seed128ecb_functions */
+IMPLEMENT_generic_cipher(seed, SEED, ecb, ECB, SEED_FLAGS, 128, 128, 0, block)
+/* seed128cbc_functions */
+IMPLEMENT_generic_cipher(seed, SEED, cbc, CBC, SEED_FLAGS, 128, 128, 128, block)
+/* seed128ofb128_functions */
+IMPLEMENT_generic_cipher(seed, SEED, ofb128, OFB, SEED_FLAGS, 128, 8, 128, stream)
+/* seed128cfb128_functions */
+IMPLEMENT_generic_cipher(seed, SEED, cfb128,  CFB, SEED_FLAGS, 128, 8, 128, stream)
diff --git a/providers/default/ciphers/cipher_seed.h b/providers/default/ciphers/cipher_seed.h
new file mode 100644 (file)
index 0000000..093cd3b
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <openssl/seed.h>
+#include "internal/ciphers/ciphercommon.h"
+
+typedef struct prov_seed_ctx_st {
+    PROV_CIPHER_CTX base;      /* Must be first */
+    union {
+        OSSL_UNION_ALIGN;
+        SEED_KEY_SCHEDULE ks;
+    } ks;
+} PROV_SEED_CTX;
+
+const PROV_CIPHER_HW *PROV_CIPHER_HW_seed_cbc(size_t keybits);
+const PROV_CIPHER_HW *PROV_CIPHER_HW_seed_ecb(size_t keybits);
+const PROV_CIPHER_HW *PROV_CIPHER_HW_seed_ofb128(size_t keybits);
+const PROV_CIPHER_HW *PROV_CIPHER_HW_seed_cfb128(size_t keybits);
diff --git a/providers/default/ciphers/cipher_seed_hw.c b/providers/default/ciphers/cipher_seed_hw.c
new file mode 100644 (file)
index 0000000..3bd3323
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include "cipher_seed.h"
+
+static int cipher_hw_seed_initkey(PROV_CIPHER_CTX *ctx,
+                                  const unsigned char *key, size_t keylen)
+{
+    PROV_SEED_CTX *sctx =  (PROV_SEED_CTX *)ctx;
+
+    SEED_set_key(key, &(sctx->ks.ks));
+    return 1;
+}
+
+# define PROV_CIPHER_HW_seed_mode(mode, UCMODE)                                \
+IMPLEMENT_CIPHER_HW_##UCMODE(mode, seed, PROV_SEED_CTX, SEED_KEY_SCHEDULE,     \
+                             SEED_##mode)                                      \
+static const PROV_CIPHER_HW seed_##mode = {                                    \
+    cipher_hw_seed_initkey,                                                    \
+    cipher_hw_seed_##mode##_cipher                                             \
+};                                                                             \
+const PROV_CIPHER_HW *PROV_CIPHER_HW_seed_##mode(size_t keybits)               \
+{                                                                              \
+    return &seed_##mode;                                                       \
+}
+
+PROV_CIPHER_HW_seed_mode(cbc, CBC)
+PROV_CIPHER_HW_seed_mode(ecb, ECB)
+PROV_CIPHER_HW_seed_mode(ofb128, OFB)
+PROV_CIPHER_HW_seed_mode(cfb128, CFB)
index a6a6c9f..7116916 100644 (file)
@@ -207,6 +207,12 @@ static const OSSL_ALGORITHM deflt_ciphers[] = {
     { "CAST5-OFB", "default=yes", cast564ofb64_functions },
     { "CAST5-CFB", "default=yes", cast564cfb64_functions },
 #endif /* OPENSSL_NO_CAST */
+#ifndef OPENSSL_NO_SEED
+    { "SEED-ECB", "default=yes", seed128ecb_functions },
+    { "SEED-CBC", "default=yes", seed128cbc_functions },
+    { "SEED-OFB", "default=yes", seed128ofb128_functions },
+    { "SEED-CFB", "default=yes", seed128cfb128_functions },
+#endif /* OPENSSL_NO_SEED */
     { NULL, NULL, NULL }
 };
 
index 8c21244..bee446c 100644 (file)
@@ -38,6 +38,9 @@ push @defltfiles, @ideafiles unless disabled("idea");
 my @castfiles = qw( evpciph_cast5.txt );
 push @defltfiles, @castfiles unless disabled("cast");
 
+my @seedfiles = qw( evpciph_seed.txt );
+push @defltfiles, @seedfiles unless disabled("seed");
+
 plan tests => (scalar(@configs) * scalar(@files)) + scalar(@defltfiles) + 1;
 
 my $infile = bldtop_file('providers', platform->dso('fips'));
index 3d7d817..b32d57d 100644 (file)
@@ -2547,56 +2547,6 @@ Plaintext = f57af5fd4ae19562976ec57a5a7ad55a5af5c5e5c5fdf5c55ad57a4a7272d57262e9
 Ciphertext = ff78128ee18ee3cb9fb0d20726a017ff67fbd09d3a4c38aa32f6d306d3fdda378e459b83ed005507449d6cd981a4c1e3ff4193870c276ef09b6317a01a2283206ae4b4be0d0b235422c8abb00122410656b75e1ffc7fb49c0d0c5d6169aa7623610579968037aee8e83fc26264ea866590fd620aa3c0a5f323d953aa7f8defb0d0d60ab5a9de44dbaf8eae74ea3ab5f30594154f405fd630aa4c4d5603efdfa1
 
 
-Title = SEED test vectors from RFC4269
-
-Cipher = SEED-ECB
-Key = 00000000000000000000000000000000
-Operation = DECRYPT
-Plaintext = 000102030405060708090A0B0C0D0E0F
-Ciphertext = 5EBAC6E0054E166819AFF1CC6D346CDB
-
-Cipher = SEED-ECB
-Key = 000102030405060708090A0B0C0D0E0F
-Operation = DECRYPT
-Plaintext = 00000000000000000000000000000000
-Ciphertext = C11F22F20140505084483597E4370F43
-
-Cipher = SEED-ECB
-Key = 4706480851E61BE85D74BFB3FD956185
-Operation = DECRYPT
-Plaintext = 83A2F8A288641FB9A4E9A5CC2F131C7D
-Ciphertext = EE54D13EBCAE706D226BC3142CD40D4A
-
-Cipher = SEED-ECB
-Key = 28DBC3BC49FFD87DCFA509B11D422BE7
-Operation = DECRYPT
-Plaintext = B41E6BE2EBA84A148E2EED84593C5EC7
-Ciphertext = 9B9B7BFCD1813CB95D0B3618F40F5122
-
-Cipher = SEED-ECB
-Key = 00000000000000000000000000000000
-Operation = ENCRYPT
-Plaintext = 000102030405060708090A0B0C0D0E0F
-Ciphertext = 5EBAC6E0054E166819AFF1CC6D346CDB
-
-Cipher = SEED-ECB
-Key = 000102030405060708090A0B0C0D0E0F
-Operation = ENCRYPT
-Plaintext = 00000000000000000000000000000000
-Ciphertext = C11F22F20140505084483597E4370F43
-
-Cipher = SEED-ECB
-Key = 4706480851E61BE85D74BFB3FD956185
-Operation = ENCRYPT
-Plaintext = 83A2F8A288641FB9A4E9A5CC2F131C7D
-Ciphertext = EE54D13EBCAE706D226BC3142CD40D4A
-
-Cipher = SEED-ECB
-Key = 28DBC3BC49FFD87DCFA509B11D422BE7
-Operation = ENCRYPT
-Plaintext = B41E6BE2EBA84A148E2EED84593C5EC7
-Ciphertext = 9B9B7BFCD1813CB95D0B3618F40F5122
-
 Title = Chacha20 test vectors from RFC7539
 
 # A.1 Test Vector 1
diff --git a/test/recipes/30-test_evp_data/evpciph_seed.txt b/test/recipes/30-test_evp_data/evpciph_seed.txt
new file mode 100644 (file)
index 0000000..c7a5526
--- /dev/null
@@ -0,0 +1,313 @@
+#
+# Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License").  You may not use
+# this file except in compliance with the License.  You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+Title = SEED CBC Test vectors (from RFC 4196)
+
+Cipher = SEED-CBC
+Key = ed2401ad22fa255991bafdb01fefd697
+IV = 93eb149f92c9905bae5cd34da06c3c8e
+Plaintext = b40d7003d9b6904b35622750c91a24575bb9a632364aa26e3ac0cf3a9c9d0dcb
+Ciphertext = f072c5b1a0588c105af8301adcd91dd067f6822155304bf3aad75ceb44341c25
+
+Cipher = SEED-CBC
+Key = 88e34f8f081779f1e9f394370ad40589
+IV = 268d66a735a81a816fbad9fa36162501
+Plaintext = d76d0d18327ec562b15e6bc365ac0c0f8d41e0bb938568aeebfd92ed1affa096394d20fc5277ddfc4de8b0fce1eb2b93d4ae40ef4768c613b50b8942f7d4b9b3
+Ciphertext = a293eae9d9aebfac37ba714bd774e427e8b706d7e7d9a097228639e0b62b3b34ced11609cef2abaaec2edf979308f379c31527a8267783e5cba3538982b48d06
+
+Title = SEED ECB Test vectors (from RFC4269)
+
+Cipher = SEED-ECB
+Key = 00000000000000000000000000000000
+Operation = DECRYPT
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = 5EBAC6E0054E166819AFF1CC6D346CDB
+
+Cipher = SEED-ECB
+Key = 000102030405060708090A0B0C0D0E0F
+Operation = DECRYPT
+Plaintext = 00000000000000000000000000000000
+Ciphertext = C11F22F20140505084483597E4370F43
+
+Cipher = SEED-ECB
+Key = 4706480851E61BE85D74BFB3FD956185
+Operation = DECRYPT
+Plaintext = 83A2F8A288641FB9A4E9A5CC2F131C7D
+Ciphertext = EE54D13EBCAE706D226BC3142CD40D4A
+
+Cipher = SEED-ECB
+Key = 28DBC3BC49FFD87DCFA509B11D422BE7
+Operation = DECRYPT
+Plaintext = B41E6BE2EBA84A148E2EED84593C5EC7
+Ciphertext = 9B9B7BFCD1813CB95D0B3618F40F5122
+
+Cipher = SEED-ECB
+Key = 00000000000000000000000000000000
+Operation = ENCRYPT
+Plaintext = 000102030405060708090A0B0C0D0E0F
+Ciphertext = 5EBAC6E0054E166819AFF1CC6D346CDB
+
+Cipher = SEED-ECB
+Key = 000102030405060708090A0B0C0D0E0F
+Operation = ENCRYPT
+Plaintext = 00000000000000000000000000000000
+Ciphertext = C11F22F20140505084483597E4370F43
+
+Cipher = SEED-ECB
+Key = 4706480851E61BE85D74BFB3FD956185
+Operation = ENCRYPT
+Plaintext = 83A2F8A288641FB9A4E9A5CC2F131C7D
+Ciphertext = EE54D13EBCAE706D226BC3142CD40D4A
+
+Cipher = SEED-ECB
+Key = 28DBC3BC49FFD87DCFA509B11D422BE7
+Operation = ENCRYPT
+Plaintext = B41E6BE2EBA84A148E2EED84593C5EC7
+Ciphertext = 9B9B7BFCD1813CB95D0B3618F40F5122
+
+Title = SEED Test vectors (from https://github.com/pyca/cryptography)
+
+Cipher = SEED-CFB
+Key = 085b8af6788fa6bc1a0b47dcf50fbd35
+IV = 58cb2b12bb52c6f14b56da9210524864
+Plaintext = 4b5a872260293312eea1a570fd39c788
+Ciphertext = 5c460dc6a83060ee36ec55c5ce6448c1
+
+Cipher = SEED-CFB
+Key = 701ccc4c0e36e512ce077f5af6ccb957
+IV = 5337ddeaf89a00dd4d58d860de968469
+Plaintext = cc1172f2f80866d0768b25f70fcf6361aab7c627c8488f97525d7d88949beeea
+Ciphertext = a6841e5e4dea28f28d7a83031442c86e5b68d1048cda42452964df577d3c0abc
+
+Cipher = SEED-CFB
+Key = 0a8e8876c96cddf3223069002002c99f
+IV = b125a20ecd79e8b5ae91af738037acf7
+Plaintext = 4fd0ecac65bfd321c88ebca0daea35d2b061205d696aab08bea68320db65451a6d6c3679fdf633f37cf8ebcf1fa94b91
+Ciphertext = 4081ec9257303ae208eea0411d7977eb82e3b8d4f2d03d299f98fbddd519812c2bbe7af6d5c13b8fa5b15f233911eaaf
+
+Cipher = SEED-CFB
+Key = b9ba9fa32cc491d8ac2beb5f99193d57
+IV = 95511452b71e53e93afad07ba1aa4d98
+Plaintext = b40382705aaeea41097c309da6cd06010f15e09c0130fa4b3af69cc8da109d1f0f0a2661f1a8b89bab7e7009dcbb8a883d46254a830c45cd87981e0ea4e490fa
+Ciphertext = d9add2885d52163ff04060b8ee46a6e02374af2f895e28ac6d2a964ca8e78bcc9e4e2d4a7a4a11cce7a605a5c0b79c7b8f546ce9159014cb4b462454de902646
+
+Cipher = SEED-CFB
+Key = 5947bbd78b06bb5ea2fc67ed7b24216e
+IV = 8e4722ad2230b15f2eea302173bc1795
+Plaintext = 9e69423653c20c982794ed35d63c1a78e8ac14f37e1888ae4bf273bfe119891b2e4ed8ac46e7a9a463c7a710298d43b02f0c5606bcfc08adceeef2ec61867f8bede498e53163803f2f86fc58782fb841
+Ciphertext = 48af72fe5b7449786965500fe685b9ebbebd15b0afcc9ecc8ce424a931d55462c52dc2cfb41eb17f3cedce1ad1546c348a190846510a427216230575245462b61161c1ef7515e209bc809b66309521d1
+
+Cipher = SEED-CFB
+Key = abce650e78f969b3b210151c74117fd2
+IV = bc4659fbb7073c1f2185cd8ac5314bd1
+Plaintext = 322eae07df5ad2ddd64bba34e42d30c1b884f842e71efa123345a3fb0c39884c57dd4c2c6fb0c42e69ff5a269d59af3a6144853c182edb376ca65947d7ccefae6806ba25c4f527706ba85a353c0fd10e3cb244dd93a2d060d7b055058dde1dff
+Ciphertext = b343343a7f0fd1c0874c8c43cb4078c6da6b6691d1747a6c583f0b93e77d0b1b58e605f80d2f9e0f06d61f75cb03b81f543f5f309aa5cfe3c1d39359be074383d9159bb0b3e51e7b7742cd439b355926589fabfc7b45bbcbb81d84828dc81947
+
+Cipher = SEED-CFB
+Key = 9f56e19b09dd3fee0e110f71e9967b7a
+IV = 1155cf4231bf7ac55d5e6eb27a974fad
+Plaintext = ad1e4d3162a5084f581117639a13fc35df5449625ffe0f01e57d9a8726875be8515926ffe7449e30cd69ed4ca0c1b8b4486051c2d0fa2f6474a69c0afce2aec349d778a22edf81678145765b714c1b7c197287da56f59141d6978618729e1d89be20ace3de7d9b3c9b2d195ab6bc0fd4
+Ciphertext = e5f75f794db9d60f1a8f64dcb241c4463b0bd8ecc57b4aea8f87db1478debdb02b9fb9a9f159b24a2b292681683394bd067fe07026043557391aa59f77421497205a44896bde4e74af04ac231f7918f66d65bf5211e3ff9d7628feee17331a9260b7412b561b1f8eaece42532bff6de7
+
+Cipher = SEED-CFB
+Key = 31c485c996d6ceb2d17e0aa05b2490e4
+IV = 8c37f33405051b4c50abd16c6456643e
+Plaintext = ac68de6a2c2144c6b4fd975a8dec93447391e7c9a4fde63d36be7f23ad186f96cd92b5e8adb546880d100329e97fe8204fad860e6dd8b3c0eed4805387536b9ccc63d6c74938b83dce2c93cc0a04a6025b7563d9e5e7239ae27819fb3844848a51e4294f273401ad9e592f8a170334b042f0667233b29f92b9b13262eb73232a
+Ciphertext = 9775a5c6dab170473a48e938e4bb036533476535c545ba27e149a2efc4f37dd4d8d45f769e74b080122077bf6d049cc146040bd56da957d644cc37abd2a20d795ad0b4a31f44f94e8b2bdeef0b7507c05a4b12dc84986d8e6c2beb1e5f6b16a057df782da903fd4bcc913e3ffc5fc75145a329e57528be7c34a92542cb80eab8
+
+Cipher = SEED-CFB
+Key = 556ccfa360ecb5025032dddb124cad4d
+IV = d54c6fdcc85dc0a28c0b06205fee8854
+Plaintext = 71fbf180effac3dca0d69d40e4017dbe50455396f9fb6507ef7df26507de156cded8edd41a05fb25f352cbcdf3b2d770f90fa87f84863e0c2ed3b2dd770a1abfc489ad1ca82a28d061bd7039a6b5788da021657136def0c78d0b0cc7cfbec9512cf579811fd01185f3fdd2ab857328be4b63d293956b43df130e484b9861eccb1d06992b095e7febb0fb394c1954aeab
+Ciphertext = d43fe04c874d091a7953ed15589f7b4b6b509c21746a366b0c32f135a9e84c6c2a1bb8d2f6a3a389f95b903db62030b1ab54ff45b1a837ada720977944707fe8ea159714f8e7cfd5299227249aec14920ab5a877a57e4b23a951bda95b8f98b908a55f73792f86944de919b0a18cc50e13c549b6d7da8806062afb125c388f02d914548f5747b1bd227520018d97066e
+
+Cipher = SEED-CFB
+Key = 7cb81fc4b203b0fa9bec49759bd515c2
+IV = 4d5e2fa3bf73f488b3e7e125f03dfbbe
+Plaintext = 362789b376d85eb8181d4eeea52d42e873ce7741c11a2f820383a7457b15489b09fb21ac4445959dc9e851b7d40682c50d7044bda46a5da39fae2bab73b3db9ed22edc7ec5da936dfa7451cb5f0a829ff0762738cc2686148f1e1f00dc3fe38139c9a173201fc1f052ca34736fc1ab3dc4e707f864d6119b7adb6c8ddd41c80de5d357d17e9c85ed7af1e4f72cb2656932ccce469202680109eef89a9f42f10a
+Ciphertext = 87fbc595b52e0c299420338f422fabd264665e5457f1df907c5a2c95fc2ed4d04c29296467123223414b0e0223dcab3d93d5740f2e498acf20f50a59d267a734733c946597c2e1e54d5d76a6cb552b264f86b1b2e135cb601f73c5ec3237d2d341f09064e3e68cf08e9e770ced087c94e54b9aba36f01cd10596615cd02f1008b3701084cddfa659fc2b7293a605c1c273f54662894d6d6ca86256d915d4fb3f
+
+Cipher = SEED-CFB
+Key = beb622d0228cde29b342bbcf4c1c83b4
+IV = 75c282fa581d9c671edf5d540951b680
+Plaintext = 860476c81685b58e71e2599efe083ce5
+Ciphertext = b8d5730f28bb21d79345e2668f9b4a91
+
+Cipher = SEED-CFB
+Key = c4666081e0b0eddb10a9a607c807378f
+IV = 5f23623288e4a41b03186024755a10ea
+Plaintext = 2fd02dab9054248073ebc0b07aed383756ccfa4fa6298722775be6a9b4ed27a5
+Ciphertext = 6bacb9856757883e22e04085deb6dd3ed3694dc6a6ea4445dd2f2684e465e6d5
+
+Cipher = SEED-CFB
+Key = df010376a6b03279338773a70e012382
+IV = 67455decec549365742525d8dbf1fed9
+Plaintext = 9b9c3dea553ec235db0011b27191544171845b7bdda0dc04a089583959bba5ab7048f8ca87eab073a8b824fdd4e82e40
+Ciphertext = 8871858efc277d3033d1c95c53a3fda31ba8d17b9f641922ef69de0277c80e914f25a8f3366106b22efef2a5c5355504
+
+Cipher = SEED-CFB
+Key = ff01aa4f7106c6bd24399076f901a530
+IV = 089b4f6054eeeef76d4e13f75de64f7e
+Plaintext = ae9cb9dfa305af83e95a3b2099f70907edcd49fbc6efc5ebe744184c76b4f56bf35774f3fe215e1c8ee42172a2dd3e6f9ccd3d9bb044325e61a6bb97e48e9986
+Ciphertext = 676537bc02ad0fc270ba547f5640bcdb125bc95d9db54029b4ef32b83da838773c0750300b4384fec116732b76f654228f6c942f54839a5a2101c1fed1eb62b3
+
+Cipher = SEED-CFB
+Key = d33d4062ab32298eafcca86b5088d5fd
+IV = fcfffce8b020240f9f694adcb8ddf213
+Plaintext = 1fe1318adb99e6d4fced292902fe8c831ba488a43f85964d6ff54b322663b380bc99fed15568278cfe1d0af795c71355bf65e876855763655eec3abf3d4b27a0341d607f4bfbd82c8900fd436f7c4186
+Ciphertext = 1898807204f12402a0ca6f11c2ff2a929123c3c18e02149740d6bc91f6a626e79b827d3fb877e1821c861b3e7a361c0fae457340692425b0b8f21447e3fadf95e60819789f2964fda844bd3c508d06c9
+
+Cipher = SEED-CFB
+Key = 47e13544a7bbf74dd68ab5ce66e5bdaa
+IV = 69480b4dd38cf3b47e2b7652751395ae
+Plaintext = 3e2e583a3a0389ca324f2aaa52b7823904ab288dae562995cf1d70c796d785fd361261434eea480ceb3d369d969652c7ff194931c0a9bd978f5ae4094d6ef32d986a092c580ccbf865e5095a7b80559be13f842f9bea9e42a3a01ef8a24a6526
+Ciphertext = d5d73ef41aea9daa98d04b309299809408eeebc8de56b2258ba97155dc0bf54150b5338be0aac01ec9a93f49c3aa193d9c74ea5fd0dd4efb9030eca445dd52784cf5f18bd4e0f5facd56620df9d66ead9de1b6fc86f8c3d87f69866a490f5ed4
+
+Cipher = SEED-CFB
+Key = ae86823695b48e8c612ae5a01b597f97
+IV = b26eef7b1d14894c0c6388ce5273f4f2
+Plaintext = 569a910bc6aa97b8939ca703fc10ce0d171625bc735a1fea7148650541109d955b1b686c6cc404b2d3d92ad9faaff217dc7b31b038b770959aeccd1ca55d650364fde51df8d4f0aeb05fa364f5028f709c179ca6df0bdfc1cb850f238d755ac44a733fce558402be0c70bc0871b8e62f
+Ciphertext = 0be12d90fd8536ef7fa415f0322dc833891e97d4e6c5427e743bae14fb2776177ad9bb8198d344e74b2c9fe720b67c35965acac1436c5f8e328fe86b4b65d389d8e060295a1c48c6de9a06835e677adea60d3ccc589754593bae6ac9f847b8f0c39253db2e863d5ce1df024f504cecf0
+
+Cipher = SEED-CFB
+Key = b85df29c9244229835d73441dc37555e
+IV = c1375430efedb2d311a37bfa5ad2110e
+Plaintext = c232a0bbf967ef28b74e7b809c62bc8c1cf2d52a273a84162900da834448fd567870471498f29770619dec504922e379eaba0d3a712602583d00279d8fc6a6d568cb94a330039a189ed5802abb7a2898c13ef89c00d73fca9a2f2ffc2107ab498212c56835c0fc26f835a69c00bb3eaa695ac20e8bdb0f5b5b6684d02bee8fb2
+Ciphertext = 7b8b2a3a38328276e2739ecac4c876633e5cc8835a46053fdbbe0bc828450bc6b2e9cb31515edbbccf74a1128213d64577eec37eff3377528dafdd14bcfe2d8cc988f7705622893d3691126ed1de20a1ae7397e3dfe78464c2d310a452608799b024e7725394b309b9def5b2840e8ffa9fb2b9da92fe2df24769c5250167f4f2
+
+Cipher = SEED-CFB
+Key = e96771f5f20a89ee871261d2d18e1e46
+IV = 8c664a37d245d26c0c55adfb424758ba
+Plaintext = 8aaafd56c5d5d54fbe16f115c3216bd1f4376666931a2ef1ffc5468ad12150c39250dca2d63c6ea166bb0ef4aaa3d5849c1f9c621c55826a1ca362f03bcba4dcbd654b300d16519710130e5360bd949aaded6a648f96dd8937a77287d4a4ac2941729475b635b9797476b4dca4171787ff15882d3b4872ed0999a7546dbb61698e8348f70e4a14981a78156150484532
+Ciphertext = 18d65e3fd66b6aef76354325c323f0cd45f6c280335b890ba6822437125b86baf0f8576039e074aeb557f73dcacedd94fe134219fda1b5fac5e4d02f5b582496e97350926902a43dec11b09d12d294b7cc815eb98c4b5f693dd341a7d47a71f6c1a9af3981c97bb13ef4abc8a54aaa0fd601e2cd981d3f49bd8e958b3fe5769a76264784116038c8086af3d49d9429bf
+
+Cipher = SEED-CFB
+Key = aef49da33f538ee66e178d4b6121055d
+IV = 842566e68b61ff7bf001f2642da62f64
+Plaintext = 415991f65e1a95040cef9960556f61e617827c30c74bf353cdd86173dbe4cc983a2ee6bc8ca6cfb71121e7b0d0178f2e13445c710dcc176b781201971171f7489f18faf110f39accd1cf08c85a958d7698b116f1c0d75812ac9b0b39aee7f7159ccad8fdae9b99f2d695eacf12c6469d5b51a34de26eac73613dcb2f77122cb1f8dd5162786a12052dc7b6dea6acc4989dcc7eafd9374f6c29697c74749ef16d
+Ciphertext = da97a99e4734c2dfe541642e30b9cea9263f5ee2055d468fc519585c4072f3163eda6cfa5014ed6b2293bf6d296cc7406530657b960072fa8aeafb6a7192c782e73dc4bcb02e621ca6a375d318ec98e7998339060650940d7d9d5e89f95a15e1d673b4c7132be9875bb339a30a61b57050b2c91e57a4b11f7f00c0df906edc508a5a54d218e62de114e89b6e1c137c3a40b55130343a3527dd85d8f9c87a1fc6
+
+Cipher = SEED-OFB
+Key = d7d57bd847154af9722a8df096e61a42
+IV = fdde201c91e401d9723868c2a612b77a
+Plaintext = 81883f22165282ba6a442a8dd2a768d4
+Ciphertext = 78aa827fca58956065e1dc0ce17bfb80
+
+Cipher = SEED-OFB
+Key = c9f4ce21b4c7daaa4f93e292dc605bc5
+IV = 5e5a8cf2808c720e01c1ed92d470a45d
+Plaintext = 8e19c5cacd015a662e7f40cdecadbf79a68081c06d9544b41c2dd248e77633b4
+Ciphertext = 814d987a07282f950fa9a6559e5443f0826243a630458327e5c20440d2a50a0d
+
+Cipher = SEED-OFB
+Key = 7a70cc6b261eeccb05c57117d5763197
+IV = bb7b9667fbd76d5ee204828769a341b1
+Plaintext = 823cbaae3760c85512a3c83fd60bb54b7cfc739b295b63e05ef435d86e19fd15368c89ff08a0f21ce89a728ffb5d75df
+Ciphertext = edeae6665592ab617f52e495e9177108399a2d073e0e7d9e4ede0545bdf9294f32a1ac2f4c915b1432024b5ca05cf91d
+
+Cipher = SEED-OFB
+Key = 85dbd5a6e73681a51a4a7d4e93ca7d0c
+IV = 89d897c5aa9e0a5d5586d4b4664fc927
+Plaintext = e3dbfc6ae1a879870fd22644c8135fe063355dfc0a8dad45c9c6e052e6e085cf717754dc1b49acb04cf340826ffb0da991138f022a9c34923a6a116c98c7d3d5
+Ciphertext = eb97edb484801398304d27fa5512417cf63fa76c3860c738cf4866dd9a024bdd2e4029fe1bc83587b452686edf971dae2390ef0af2a00deef79216b1104e43f6
+
+Cipher = SEED-OFB
+Key = 18b9887a34438fb2e759027e54e334b6
+IV = a5be8621e58dae325c6b868fd783e2cd
+Plaintext = 8cd659df925950b516f737fc92d2fafa008c008c9dfe0e75ed2d68f6ff79399ff2183464b8c37cf31aafc145fcbfac73e3f87eccb435f424bf1c6d6efb504e8e93e8a668a2210e3d3b4fd437ad1a5842
+Ciphertext = ecee4794867f81ee0ab465481f160521a918121e02308744e65cbacc4c369ef0b98ff6feaca41a8979045c4bd49487b4f3437376c4b6f43536973ba54bdd2b7170c7136f92e87cba79b892616b80fe10
+
+Cipher = SEED-OFB
+Key = da52c0e4609e82ee926174a9eaf90b08
+IV = f2d0c5e86b4ddb40d30713aaa5a153fe
+Plaintext = 91d6c95a614cf85de16eeabe5976c2a2a9d307042f79a7aaeb7c3c57e1dd8d43bfa458c8c02e4f5ed0c960c9f17e3991dd2e0cb3ede18f96395a484001ef07ca4c97b411ce454aaf0f74242aca03786a93442171bd50a1467b9d663245d24c2f
+Ciphertext = 6207d66ce45fa32922bc75c14bd1a2d44a8daf4e655f9b9934f7f41de98337d3f6aa6175f43d056b6be3decb791a324c80a84983b026dcdabdcd1cf93059a238e14ff5c952b740802cd11171f5275c12adb6564532de13194c66532c0cc17663
+
+Cipher = SEED-OFB
+Key = 56d6f7e2a870b92d55ff8d6e9c554d2a
+IV = b512f0e11e27fd1a94aa0c697bb6da5e
+Plaintext = e62cdeac43667749701314c546f778a4c758e4f55760e7d729c3783cf7a242edf6ae3fcf0990886434896c945455bfae0e5674aa06ee6fb1512d94df2cac2447eeb849373bb3efbe7bb8d66c8a7ee559b17fc268d6599fcdef7457cdbde5b9c5b692236e4397545f2be97bd44f3993ad
+Ciphertext = 22632b7abf711ad0e66f1834e5984609df0fdf0903a7180c713e1c084812913c31d1fb3469c777a94e5115fc1c4a081283fa2d28a9aec1b6f46738d8bf04ab6b82505b2063153a12dace49000aa9ac41ff3cdf9510a20183f934d364f52cd72cc6b5deb192ca5bacbff471565ae2d563
+
+Cipher = SEED-OFB
+Key = 09f216ff78dfe419dfcef1a855473414
+IV = 722174c892d265291982c6f042ced145
+Plaintext = 11f435e7e3656fcfa8e0df230311ca21054e84e13c8590e7ec7309f59c174022d467a7302641ee1b6ba46bee4f20bfda108bb78982f670b057dfbfe49da9cfae88490ce17241402b20d2fceb476d3a424e6c406d56ffc85278695d584d6c087cb4012ca2cf4daf284fd15ac1f2e183814957e934bf88dff4d777adfbb54933b5
+Ciphertext = d9a5d3bc0a558b86046877a9030a09c537c2830b93dd9f56df91233f3b403fa39dc820d5eadf46ca016ad130018310a4e31e0974bb233085236340e057cac0d6968f0fcceea780b9da7bfb297e8593abd242e382e7482e9c4679b7cb720798c17522c5cf4db9004368f609b5280b5421f30a39a6659d51ef8feafed739959441
+
+Cipher = SEED-OFB
+Key = cde9b69eea2b6a5588457e35e0a08803
+IV = 52323b54d69a62fec0689baee1b3ec63
+Plaintext = 967798995af6f435b3a6f92bff77a11fa44d1426ae0f6e7dbafac27b123c5fc419be52c0ea412c4b3cac05ae89a4c0ce6f5e91a456b1bded5370a1234cf6f6ab5d0253507bc6f3f0573ab97585b67107dec059812323e021e341ad839ea9e3d02aeca43356add48ccef81f693ed53d32ba1c74a35e8a5f7f3115ef834f7daf9948244c4fc31f5487678d3e70fb27abb5
+Ciphertext = 1dc92191514c65141edb04acc655cf3c664ff5727d569b636787332ef1e34b1afd4b8e9acf4b745530fa7b3094f45a32d82b0e2be7cc035a1dded75f4033bcc4727dd14303761a9061b8365a8893e2569d045f08d2b447c35d2f927ac6103730e3aa4e81aef54c426320d657e2aa169bf8884ef0541074e9c08793364646a9a99df0e5022ea3740361096c3790707b3d
+
+Cipher = SEED-OFB
+Key = 939aac71e337709855715a57e3a4648f
+IV = 493509b56a92f14040eb9b66a188bc57
+Plaintext = 9c22efddc7de496a916d15d710de374d57478126ed64c9ad7e823e24d19bfc0cfac3dda0d1c292a3a203f35b26ad94deb20f998caf41cbdd4a08eb5d6cfb46f4ede4896b0569d72c03ec194941af95c0573cc3fe8f045ba19946b382803248f3dd4f9a454b1a3e8e1af02ea8482d637dac96a68275f4a382d3023f9df4892b9032cab9378b1cef5051d6db81226f259d1be4eb23495ac807600536b5b0481754
+Ciphertext = 5bf691be73fa80ebdfcf9ab0657729c9017505cb7163afb35c120915e111d2a2978e373164579c9ffc66bfe189ffe1fbe641d45c8d91a2bab418d8b549eb027721d241a9d80e298c79c75d7db8dec3a8d56cf27d33431c07ac4128b1068684e1d99b1ff23f83e8badb704600de7ae95cbef8029f101bfa852ef5f69cc7a7427d0fa3abd7de68db07de0ba4c17fd579ffcf1be3ad9e5f724c8e9c87c079f2afec
+
+Cipher = SEED-OFB
+Key = 8368189d41eaa20d06a3a2d2a91e43f7
+IV = cf04ac0e4733952ba538711f79eef8ca
+Plaintext = 696ca57339840fb3c150e0c111d9e13e
+Ciphertext = 03f102dbfb29bcde9e7d16825de64228
+
+Cipher = SEED-OFB
+Key = 5124c6fdb0856ded76afb6febdaa981e
+IV = 937ebdeec379685a71d466703f788ff7
+Plaintext = 5a5928dd09e78a21256eadb062630a3f0b47ca2376ccae314948143fff2512d4
+Ciphertext = 841cca2b58abd8d0b68fa2d3949bc943a105427f2deb117572de28cd0581c54a
+
+Cipher = SEED-OFB
+Key = 6a8f6487e76058bc5a126276e48fdd77
+IV = 6e75d8b8ac0976143ea103a710caec02
+Plaintext = 424ddc343067612fdb426920f40ab4d82e3d4f9485b07fef91617556d3093874840e8110ff375b7a68f98c471ca10acc
+Ciphertext = c9123902ac5cfd3f0151b4e95185815ddf4ea92baadd91215007c98ab3dcbae14ca5cfcb5aafeea9939b998e3f4ec276
+
+Cipher = SEED-OFB
+Key = 01963d44aea026b2205238454d5bb73f
+IV = 9442a6e0f3a53f10b0ccf5b0ccc1793a
+Plaintext = c54cfacd953736a2d8db0b8b63b555253a0ca6f6e05f2e918d18be95669fa85609f827d6da014add2964626670c202b195248fc986372c92adbb10c0e7c36e04
+Ciphertext = d6592ec2f649ea123bce88818ebbbb74d3b6b55a987ab01db21b5ef91cf8a9fff6851a6ce523d2607da048d9e0897ff672d787433cd54b6c9c25a7a5aeea1538
+
+Cipher = SEED-OFB
+Key = 4ea87b0b346054c097edc5601b782870
+IV = 9a3e23333b2b2de7eceea67a7ca97641
+Plaintext = 0c7734310c5ca82b520bf1e0a1614c7ddd0c002711ef0b239de8fa256e15b32056b992747ff3a3a310d52e9df36275d9192dad61caa16715744552c865c5ae9477a70a2c3a02a01ba176b927445094d2
+Ciphertext = a91c4fb4f9e05adab087db1fd125b1f42dd26953bb3b3d722adb443c0a4b927ef83c62ae3ef8e1f83ef8e6b50a3b8caf7a623fa9d23685cda5851139a69c449d8b94877c3547c37e8c246738c6183b50
+
+Cipher = SEED-OFB
+Key = 1956f40b2334a6546b3071f2d17f4a59
+IV = 765cfb560c46777a20cce091232ccaf2
+Plaintext = 045ad66c515d407ab73ea0c6f6ae869872342fc72956a659945454005e37c76ed07df996ffe1322840cf23843b34346a1e730ab721ddceaf362ed256054c105ed581a80c04ef22ae1b5eb8742c6e3c9c0e0e29fad211b4f40adc1520f7c6821e
+Ciphertext = e77614bed3d8fc7a22355efc2d1401cd1386fcd6585b472a500278c56108123af13bbfffdd87bc963634f28ab8355061f23c6d943fd226360685b5fda3eee847d64154af7f48732f37c3a4f740ed73dd276dafc9a2e3a22f381a61501dd89b73
+
+Cipher = SEED-OFB
+Key = 4e47e1b5c1b489295d3a2bf049f4be2d
+IV = 83fdf064d213df417ba0e75ec517bf63
+Plaintext = 94a7bed3b5a158e85f9e4778a7de105ff4f3b2a61c2fead82cbe949d7a4ee961a6c62949ba2c69d513d836a455b612c2fbb6ca243a0a18a853cadb6b73b600192de1d51ddf80030718b079fbb581073a06b66ba4ad524d3d09efaa59e6919bca15b2b92bd9f8c17d6e463f4ea5fd5f5e
+Ciphertext = 6a64fccc9e7f00bc696e09761c1a059557e02d16b6d407931b1abde227b6c42e512eeabcf5d01d7a662da46c1c87ffb7575607e1b88a755c7d469c55f7cc98d4ccf9f3fc3a29e22b7e16052cfe90c61132311853547885d7a78cbcdc1a26c05953d3f45735901d44dad6710d67712c20
+
+Cipher = SEED-OFB
+Key = 613485e5bb84b91cdd0ca02f8d83e0bb
+IV = ad8a7564f6ce8abb6949ddb7d7186580
+Plaintext = ed5068003163c424ae9a8e51e3d77684c69073a824dc4721568f7528657c3dd28d66219f398ed57105aa35cfef3ac078eab30ae0f3ed752b0e320b099ea42b156f818904c4b6c534cabde53dfa62e7b74518a8bca3f36ee85b130e8520d38c006e6adef34bbc8df56b757b500d703e5777aa545c4170404754f03dbf22c9f0d7
+Ciphertext = 63e2f4b237b0635709ed42bf7ce29a0a828fd52f157dbed5a7b78d5afb8cc780f009c7982a31eb4db2a2d30d80622fa84c430fd69c68652a2876f984a3a795d952a8ed540d6ef936ba85ce7932523e47ec6e9865ffc4f8805232039b79c5fbfbfa8c18d7b4aa655c247357b5b3b2e960e0eac46a13f52c5646c396887500b6ad
+
+Cipher = SEED-OFB
+Key = 8198b36e880cf50dbf6724feaaac8688
+IV = fbaa2882a2a4acdb299e4f82c93f2af7
+Plaintext = b2516a356e437513f0df83938afefbe9f9ef1ec879797997f31da96a1ea7a15d395ecdb94b7fda14cdc0b75c171784fa8832d574b64f9450c6be25dc83b93d3bbf0145a661bf4db775282b98649b64613aeedb8bb770f67cc3421ac6761e5d763c21ac2d1e729e4597ad7fca9fdc70878b26634df78cd0f36fb3b138a1357915abba4ff5f8dfaef268307022f2e23528
+Ciphertext = 40396cb65cc8eda8c591e671cbf92889588fe593fbe6e8e884a9d58f90df8505025cd0e268c368fc4aed1e8a5be2359a72d087775f85f6944b0cf731e8051cf80f0b9aac8073f82c01e0306077bfbf547d9074b8cf2a844d778371b0db8c7d8358596404a4047bafc3e4c9bd424860dbe3b1a54bb68f0461e8612940695b795a1e5aad72befb79ea8c5336d01758d077
+
+Cipher = SEED-OFB
+Key = e30b4c874c4c4f6e0cf1f8ef58e5d375
+IV = 7e26f07f8024343cec35409e71e0cd8c
+Plaintext = 8ceca4dc346cfd6b15774e082db1a89497b7d85d6b5b7102e77417f7a243fafe17118b7a3bb49d1657cf61b866da395a5b3f349183a53dfa11fc0ac053bddff49dd472ee55f5e43a2f8bc785e2bc420300694919ff7bb43feb75a9cac44ece96f679e618db5d7433af12dcc7e0963ff10b45d835f9a8f42627e7f3fd5038932685965ad0e183f5955e671fc2b878dd51051eedaf85310d1e4e8f75f2decf36c7
+Ciphertext = 6328ab2e9039edcd034499d13561b8866ff4f528a375365e84e1a2de9d2e58cd6b6e9cad7215d105e0653a480dbc3e69d8ba496d4333515e879b20df1bc9f77382b81db4d846fbb9e93b60b80558322c6b7e1936076295c842e262f84dff7b47e406a62c44900e6d1383199deee77215ed4c27397d4f01acdbd4d54328e538770e87d9e4900602a129f405cc1f8800ea723cdb109afffc9d04da2b1403a8d3e7