]> git.mxchange.org Git - friendica-addons.git/blobdiff - securemail/php-gpg/libs/GPG/AES.php
New experimental plugin 'secure mail'
[friendica-addons.git] / securemail / php-gpg / libs / GPG / AES.php
diff --git a/securemail/php-gpg/libs/GPG/AES.php b/securemail/php-gpg/libs/GPG/AES.php
new file mode 100644 (file)
index 0000000..25e4e4a
--- /dev/null
@@ -0,0 +1,63 @@
+<?php\r
+/** @package    php-gpg::GPG */\r
+\r
+/** require supporting files */\r
+require_once("Cipher.php");\r
+\r
+/**\r
+ * @package    php-gpg::GPG\r
+ */\r
+class GPG_AES\r
+{\r
+       static function encrypt($block, $ctx)\r
+       {\r
+               $RCON = GPG_Cipher::$RCON;\r
+               $S = GPG_Cipher::$S;\r
+               \r
+               $T1 = GPG_Cipher::$T1;\r
+               $T2 = GPG_Cipher::$T2;\r
+               $T3 = GPG_Cipher::$T3;\r
+               $T4 = GPG_Cipher::$T4;\r
+               \r
+               $r = 0;\r
+               $t0 = 0;\r
+               $t1 = 0;\r
+               $t2 = 0;\r
+               $t3 = 0;\r
+               \r
+               $b = GPG_Utility::pack_octets($block);\r
+               $rounds = $ctx->rounds;\r
+               $b0 = $b[0];\r
+               $b1 = $b[1];\r
+               $b2 = $b[2];\r
+               $b3 = $b[3];\r
+               \r
+               for($r = 0; $r < $rounds - 1; $r++) {\r
+                       $t0 = $b0 ^ $ctx->rk[$r][0];\r
+                       $t1 = $b1 ^ $ctx->rk[$r][1];\r
+                       $t2 = $b2 ^ $ctx->rk[$r][2];\r
+                       $t3 = $b3 ^ $ctx->rk[$r][3];\r
+                       \r
+                       $b0 = $T1[$t0 & 255] ^ $T2[($t1 >> 8) & 255] ^ $T3[($t2 >> 16) & 255] ^ $T4[GPG_Utility::zshift($t3, 24)];\r
+                       $b1 = $T1[$t1 & 255] ^ $T2[($t2 >> 8) & 255] ^ $T3[($t3 >> 16) & 255] ^ $T4[GPG_Utility::zshift($t0, 24)];\r
+                       $b2 = $T1[$t2 & 255] ^ $T2[($t3 >> 8) & 255] ^ $T3[($t0 >> 16) & 255] ^ $T4[GPG_Utility::zshift($t1, 24)];\r
+                       $b3 = $T1[$t3 & 255] ^ $T2[($t0 >> 8) & 255] ^ $T3[($t1 >> 16) & 255] ^ $T4[GPG_Utility::zshift($t2, 24)];\r
+               }\r
+               \r
+               $r = $rounds - 1;\r
+               \r
+               $t0 = $b0 ^ $ctx->rk[$r][0];\r
+               $t1 = $b1 ^ $ctx->rk[$r][1];\r
+               $t2 = $b2 ^ $ctx->rk[$r][2];\r
+               $t3 = $b3 ^ $ctx->rk[$r][3];\r
+               \r
+               $b[0] = GPG_Cipher::F1($t0, $t1, $t2, $t3) ^ $ctx->rk[$rounds][0];\r
+               $b[1] = GPG_Cipher::F1($t1, $t2, $t3, $t0) ^ $ctx->rk[$rounds][1];\r
+               $b[2] = GPG_Cipher::F1($t2, $t3, $t0, $t1) ^ $ctx->rk[$rounds][2];\r
+               $b[3] = GPG_Cipher::F1($t3, $t0, $t1, $t2) ^ $ctx->rk[$rounds][3];\r
+               \r
+               return GPG_Utility::unpack_octets($b);\r
+       }\r
+}\r
+\r
+?>
\ No newline at end of file