File 4721-Add-OFB-mode-support-for-AES.patch of Package erlang

From 5a054c3367a25f116e0dfeb437ad2f7476e48dea Mon Sep 17 00:00:00 2001
From: ausimian <nick@ausimian.net>
Date: Wed, 6 Apr 2022 00:39:40 +1000
Subject: [PATCH] Add OFB mode support for AES

Add Output Feedback mode support for AES encryption / decryption for key
sizes of 128, 192 and 256 bits.
---
 lib/crypto/c_src/cipher.c                |  4 +++
 lib/crypto/doc/src/algorithm_details.xml |  3 +++
 lib/crypto/src/crypto.erl                |  4 +++
 lib/crypto/test/crypto_SUITE.erl         | 33 +++++++++++++++++++++---
 4 files changed, 41 insertions(+), 3 deletions(-)

diff --git a/lib/crypto/c_src/cipher.c b/lib/crypto/c_src/cipher.c
index 6862187d6b..5b5d9389aa 100644
--- a/lib/crypto/c_src/cipher.c
+++ b/lib/crypto/c_src/cipher.c
     {{"aes_192_cbc"}, {&EVP_aes_192_cbc}, 24, 0, NOT_AEAD},
     {{"aes_256_cbc"}, {&EVP_aes_256_cbc}, 32, 0, NOT_AEAD},
 
+    {{"aes_128_ofb"}, {&EVP_aes_128_ofb}, 16, 0, NOT_AEAD},
+    {{"aes_192_ofb"}, {&EVP_aes_192_ofb}, 24, 0, NOT_AEAD},
+    {{"aes_256_ofb"}, {&EVP_aes_256_ofb}, 32, 0, NOT_AEAD},
+
     {{"aes_128_cfb8"}, {&EVP_aes_128_cfb8}, 16, AES_CFBx, NOT_AEAD},
     {{"aes_192_cfb8"}, {&EVP_aes_192_cfb8}, 24, AES_CFBx, NOT_AEAD},
     {{"aes_256_cfb8"}, {&EVP_aes_256_cfb8}, 32, AES_CFBx, NOT_AEAD},
diff --git a/lib/crypto/doc/src/algorithm_details.xml b/lib/crypto/doc/src/algorithm_details.xml
index dce04a1409..867c2fd649 100644
--- a/lib/crypto/doc/src/algorithm_details.xml
+++ b/lib/crypto/doc/src/algorithm_details.xml
@@ -111,6 +111,9 @@
 	<row><cell><c>aes_128_ctr</c></cell>   <cell>16</cell>      <cell>16</cell>      <cell>&nbsp;1</cell> <cell></cell></row>
 	<row><cell><c>aes_192_ctr</c></cell>   <cell>24</cell>      <cell>16</cell>      <cell>&nbsp;1</cell> <cell></cell></row>
 	<row><cell><c>aes_256_ctr</c></cell>   <cell>32</cell>      <cell>16</cell>      <cell>&nbsp;1</cell> <cell></cell></row>
+	<row><cell><c>aes_128_ofb</c></cell>   <cell>16</cell>      <cell>16</cell>      <cell>&nbsp;1</cell> <cell></cell></row>
+	<row><cell><c>aes_192_ofb</c></cell>   <cell>24</cell>      <cell>16</cell>      <cell>&nbsp;1</cell> <cell></cell></row>
+	<row><cell><c>aes_256_ofb</c></cell>   <cell>32</cell>      <cell>16</cell>      <cell>&nbsp;1</cell> <cell></cell></row>
 	<row><cell><c>blowfish_cbc</c></cell>  <cell>16</cell>      <cell>&nbsp;8</cell> <cell>&nbsp;8</cell> <cell></cell></row>
 	<row><cell><c>blowfish_cfb64</c></cell><cell>16</cell>      <cell>&nbsp;8</cell> <cell>&nbsp;1</cell> <cell></cell></row>
 	<row><cell><c>blowfish_ofb64</c></cell><cell>16</cell>      <cell>&nbsp;8</cell> <cell>&nbsp;1</cell> <cell></cell></row>
diff --git a/lib/crypto/src/crypto.erl b/lib/crypto/src/crypto.erl
index b28b61bc7d..6365961b0e 100644
--- a/lib/crypto/src/crypto.erl
+++ b/lib/crypto/src/crypto.erl
@@ -367,6 +367,10 @@
                    | aes_192_cbc
                    | aes_256_cbc
 
+                   | aes_128_ofb
+                   | aes_192_ofb
+                   | aes_256_ofb
+
                    | aes_128_cfb128
                    | aes_192_cfb128
                    | aes_256_cfb128
diff --git a/lib/crypto/test/crypto_SUITE.erl b/lib/crypto/test/crypto_SUITE.erl
index 15ab9e735a..e2396f9800 100644
--- a/lib/crypto/test/crypto_SUITE.erl
+++ b/lib/crypto/test/crypto_SUITE.erl
@@ -150,6 +150,7 @@
          aes_128_ctr/1,
          aes_128_ecb/1,
          aes_128_gcm/1,
+         aes_128_ofb/1,
          aes_192_cbc/1,
          aes_192_ccm/1,
          aes_192_cfb128/1,
@@ -157,6 +158,7 @@
          aes_192_ctr/1,
          aes_192_ecb/1,
          aes_192_gcm/1,
+         aes_192_ofb/1,
          aes_256_cbc/1,
          aes_256_ccm/1,
          aes_256_cfb128/1,
@@ -164,6 +166,7 @@
          aes_256_ctr/1,
          aes_256_ecb/1,
          aes_256_gcm/1,
+         aes_256_ofb/1,
          aes_cbc/1,
          aes_cbc128/1,
          aes_cbc256/1,
@@ -271,7 +274,10 @@ all() ->
         {group, aes_256_cfb128},
         {group, aes_128_cfb8},
         {group, aes_192_cfb8},
-        {group, aes_256_cfb8}
+        {group, aes_256_cfb8},
+        {group, aes_128_ofb},
+        {group, aes_192_ofb},
+        {group, aes_256_ofb}
        ).
         
 -define(RETIRED_TYPE_ALIASES,
@@ -496,6 +502,9 @@ groups() ->
      {aes_128_gcm,  [], [aead, aead_ng, aead_bad_tag]},
      {aes_192_gcm,  [], [aead, aead_ng, aead_bad_tag]},
      {aes_256_gcm,  [], [aead, aead_ng, aead_bad_tag]},
+     {aes_128_ofb,  [], [api_ng, api_ng_one_shot]},
+     {aes_192_ofb,  [], [api_ng, api_ng_one_shot]},
+     {aes_256_ofb,  [], [api_ng, api_ng_one_shot]},
 
      %% Retired aliases
      {aes_cbc,    [], [block]},
@@ -3239,6 +3248,21 @@ aes_256_cbc(Config) ->
              ["CBCVarTxt256.rsp", "CBCVarKey256.rsp", "CBCGFSbox256.rsp", "CBCKeySbox256.rsp",
               "CBCMMT256.rsp"]).
 
+aes_128_ofb(Config) ->
+    read_rsp(Config, aes_128_ofb,
+             ["OFBVarTxt128.rsp", "OFBVarKey128.rsp", "OFBGFSbox128.rsp", "OFBKeySbox128.rsp",
+              "OFBMMT128.rsp"]).
+
+aes_192_ofb(Config) ->
+    read_rsp(Config, aes_192_ofb,
+             ["OFBVarTxt192.rsp", "OFBVarKey192.rsp", "OFBGFSbox192.rsp", "OFBKeySbox192.rsp",
+              "OFBMMT192.rsp"]).
+
+aes_256_ofb(Config) ->
+    read_rsp(Config, aes_256_ofb,
+             ["OFBVarTxt256.rsp", "OFBVarKey256.rsp", "OFBGFSbox256.rsp", "OFBKeySbox256.rsp",
+              "OFBMMT256.rsp"]).
+
 aes_ecb(Config) ->
     read_rsp(Config, aes_ecb,
              ["ECBVarTxt128.rsp", "ECBVarKey128.rsp", "ECBGFSbox128.rsp", "ECBKeySbox128.rsp",
-- 
2.34.1

openSUSE Build Service is sponsored by