You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by hu...@apache.org on 2016/05/16 06:40:32 UTC
[01/11] incubator-hawq git commit: HAWQ-394. Remove pgcrypto from
code base
Repository: incubator-hawq
Updated Branches:
refs/heads/master c66d69e81 -> 101adfab1
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/pgp-pubkey-decrypt.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/pgp-pubkey-decrypt.sql b/contrib/pgcrypto/sql/pgp-pubkey-decrypt.sql
deleted file mode 100644
index 82c6086..0000000
--- a/contrib/pgcrypto/sql/pgp-pubkey-decrypt.sql
+++ /dev/null
@@ -1,549 +0,0 @@
---
--- PGP Public Key Encryption
---
-
--- As most of the low-level stuff is tested in symmetric key
--- tests, here's only public-key specific tests
-
-create table keytbl (
- id int4,
- name text,
- pubkey text,
- seckey text
-);
-create table encdata (
- id int4,
- data text
-);
-
-insert into keytbl (id, name, pubkey, seckey)
-values (1, 'elg1024', '
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-mQGiBELIIUgRBACp401L6jXrLB28c3YA4sM3OJKnxM1GT9YTkWyE3Vyte65H8WU9
-tGPBX7OMuaX5eGZ84LFUGvaP0k7anfmXcDkCO3P9GgL+ro/dS2Ps/vChQPZqHaxE
-xpKDUt47B7DGdRJrC8DRnIR4wbSyQA6ma3S1yFqC5pJhSs+mqf9eExOjiwCgntth
-klRxIYw352ZX9Ov9oht/p/ED/1Xi4PS+tkXVvyIw5aZfa61bT6XvDkoPI0Aj3GE5
-YmCHJlKA/IhEr8QJOLV++5VEv4l6KQ1/DFoJzoNdr1AGJukgTc6X/WcQRzfQtUic
-PHQme5oAWoHa6bVQZOwvbJh3mOXDq/Tk/KF22go8maM44vMn4bvv+SBbslviYLiL
-jZJ1A/9JXF1esNq+X9HehJyqHHU7LEEf/ck6zC7o2erM3/LZlZuLNPD2cv3oL3Nv
-saEgcTSZl+8XmO8pLmzjKIb+hi70qVx3t2IhMqbb4B/dMY1Ck62gPBKa81/Wwi7v
-IsEBQLEtyBmGmI64YpzoRNFeaaF9JY+sAKqROqe6dLjJ7vebQLQfRWxnYW1hbCAx
-MDI0IDx0ZXN0QGV4YW1wbGUub3JnPoheBBMRAgAeBQJCyCFIAhsDBgsJCAcDAgMV
-AgMDFgIBAh4BAheAAAoJEBwpvA0YF3NkOtsAniI9W2bC3CxARTpYrev7ihreDzFc
-AJ9WYLQxDQAi5Ec9AQoodPkIagzZ4LkBDQRCyCFKEAQAh5SNbbJMAsJ+sQbcWEzd
-ku8AdYB5zY7Qyf9EOvn0g39bzANhxmmb6gbRlQN0ioymlDwraTKUAfuCZgNcg/0P
-sxFGb9nDcvjIV8qdVpnq1PuzMFuBbmGI6weg7Pj01dlPiO0wt1lLX+SubktqbYxI
-+h31c3RDZqxj+KAgxR8YNGMAAwYD+wQs2He1Z5+p4OSgMERiNzF0acZUYmc0e+/9
-6gfL0ft3IP+SSFo6hEBrkKVhZKoPSSRr5KpNaEobhdxsnKjUaw/qyoaFcNMzb4sF
-k8wq5UlCkR+h72u6hv8FuleCV8SJUT1U2JjtlXJR2Pey9ifh8rZfu57UbdwdHa0v
-iWc4DilhiEkEGBECAAkFAkLIIUoCGwwACgkQHCm8DRgXc2TtrwCfdPom+HlNVE9F
-ig3hGY1Rb4NEk1gAn1u9IuQB+BgDP40YHHz6bKWS/x80
-=RWci
------END PGP PUBLIC KEY BLOCK-----
-', '
------BEGIN PGP PRIVATE KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-lQG7BELIIUgRBACp401L6jXrLB28c3YA4sM3OJKnxM1GT9YTkWyE3Vyte65H8WU9
-tGPBX7OMuaX5eGZ84LFUGvaP0k7anfmXcDkCO3P9GgL+ro/dS2Ps/vChQPZqHaxE
-xpKDUt47B7DGdRJrC8DRnIR4wbSyQA6ma3S1yFqC5pJhSs+mqf9eExOjiwCgntth
-klRxIYw352ZX9Ov9oht/p/ED/1Xi4PS+tkXVvyIw5aZfa61bT6XvDkoPI0Aj3GE5
-YmCHJlKA/IhEr8QJOLV++5VEv4l6KQ1/DFoJzoNdr1AGJukgTc6X/WcQRzfQtUic
-PHQme5oAWoHa6bVQZOwvbJh3mOXDq/Tk/KF22go8maM44vMn4bvv+SBbslviYLiL
-jZJ1A/9JXF1esNq+X9HehJyqHHU7LEEf/ck6zC7o2erM3/LZlZuLNPD2cv3oL3Nv
-saEgcTSZl+8XmO8pLmzjKIb+hi70qVx3t2IhMqbb4B/dMY1Ck62gPBKa81/Wwi7v
-IsEBQLEtyBmGmI64YpzoRNFeaaF9JY+sAKqROqe6dLjJ7vebQAAAnj4i4st+s+C6
-WKTIDcL1Iy0Saq8lCp60H0VsZ2FtYWwgMTAyNCA8dGVzdEBleGFtcGxlLm9yZz6I
-XgQTEQIAHgUCQsghSAIbAwYLCQgHAwIDFQIDAxYCAQIeAQIXgAAKCRAcKbwNGBdz
-ZDrbAJ9cp6AsjOhiLxwznsMJheGf4xkH8wCfUPjMCLm4tAEnyYn2hDNt7CB8B6Kd
-ATEEQsghShAEAIeUjW2yTALCfrEG3FhM3ZLvAHWAec2O0Mn/RDr59IN/W8wDYcZp
-m+oG0ZUDdIqMppQ8K2kylAH7gmYDXIP9D7MRRm/Zw3L4yFfKnVaZ6tT7szBbgW5h
-iOsHoOz49NXZT4jtMLdZS1/krm5Lam2MSPod9XN0Q2asY/igIMUfGDRjAAMGA/sE
-LNh3tWefqeDkoDBEYjcxdGnGVGJnNHvv/eoHy9H7dyD/kkhaOoRAa5ClYWSqD0kk
-a+SqTWhKG4XcbJyo1GsP6sqGhXDTM2+LBZPMKuVJQpEfoe9ruob/BbpXglfEiVE9
-VNiY7ZVyUdj3svYn4fK2X7ue1G3cHR2tL4lnOA4pYQAA9030E4u2ZKOfJBpUM+EM
-m9VmsGjaQZV4teB0R/q3W8sRIYhJBBgRAgAJBQJCyCFKAhsMAAoJEBwpvA0YF3Nk
-7a8AniFFotw1x2X+oryu3Q3nNtmxoKHpAJ9HU7jw7ydg33dI9J8gVkrmsSZ2/w==
-=nvqq
------END PGP PRIVATE KEY BLOCK-----
-');
-
-insert into keytbl (id, name, pubkey, seckey)
-values (2, 'elg2048', '
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-mQGiBELIIgoRBAC1onBpxKYgDvrgCaUWPY34947X3ogxGOfCN0p6Eqrx+2PUhm4n
-vFvmczpMT4iDc0mUO+iwnwsEkXQI1eC99g8c0jnZAvzJZ5miAHL8hukMAMfDkYke
-5aVvcPPc8uPDlItpszGmH0rM0V9TIt/i9QEXetpyNWhk4jj5qnohYhLeZwCgkOdO
-RFAdNi4vfFPivvtAp2ffjU8D/R3x/UJCvkzi7i9rQHGo313xxmQu5BuqIjANBUij
-8IE7LRPI/Qhg2hYy3sTJwImDi7VkS+fuvNVk0d6MTWplAXYU96bn12JaD21R9sKl
-Fzcc+0iZI1wYA1PczisUkoTISE+dQFUsoGHfpDLhoBuesXQrhBavI8t8VPd+nkdt
-J+oKA/9iRQ87FzxdYTkh2drrv69FZHc3Frsjw9nPcBq/voAvXH0MRilqyCg7HpW/
-T9naeOERksa+Rj4R57IF1l4e5oiiGJo9QmaKZcsCsXrREJCycrlEtMqXfSPy+bi5
-0yDZE/Qm1dwu13+OXOsRvkoNYjO8Mzo9K8wU12hMqN0a2bu6a7QjRWxnYW1hbCAy
-MDQ4IDx0ZXN0MjA0OEBleGFtcGxlLm9yZz6IXgQTEQIAHgUCQsgiCgIbAwYLCQgH
-AwIDFQIDAxYCAQIeAQIXgAAKCRBI6c1W/qZo29PDAKCG724enIxRog1j+aeCp/uq
-or6mbwCePuKy2/1kD1FvnhkZ/R5fpm+pdm25Ag0EQsgiIhAIAJI3Gb2Ehtz1taQ9
-AhPY4Avad2BsqD3S5X/R11Cm0KBE/04D29dxn3f8QfxDsexYvNIZjoJPBqqZ7iMX
-MhoWyw8ZF5Zs1mLIjFGVorePrm94N3MNPWM7x9M36bHUjx0vCZKFIhcGY1g+htE/
-QweaJzNVeA5z4qZmik41FbQyQSyHa3bOkTZu++/U6ghP+iDp5UDBjMTkVyqITUVN
-gC+MR+da/I60irBVhue7younh4ovF+CrVDQJC06HZl6CAJJyA81SmRfi+dmKbbjZ
-LF6rhz0norPjISJvkIqvdtM4VPBKI5wpgwCzpEqjuiKrAVujRT68zvBvJ4aVqb11
-k5QdJscAAwUH/jVJh0HbWAoiFTe+NvohfrA8vPcD0rtU3Y+siiqrabotnxJd2NuC
-bxghJYGfNtnx0KDjFbCRKJVeTFok4UnuVYhXdH/c6i0/rCTNdeW2D6pmR4GfBozR
-Pw/ARf+jONawGLyUj7uq13iquwMSE7VyNuF3ycL2OxXjgOWMjkH8c+zfHHpjaZ0R
-QsetMq/iNBWraayKZnWUd+eQqNzE+NUo7w1jAu7oDpy+8a1eipxzK+O0HfU5LTiF
-Z1Oe4Um0P2l3Xtx8nEgj4vSeoEkl2qunfGW00ZMMTCWabg0ZgxPzMfMeIcm6525A
-Yn2qL+X/qBJTInAl7/hgPz2D1Yd7d5/RdWaISQQYEQIACQUCQsgiIgIbDAAKCRBI
-6c1W/qZo25ZSAJ98WTrtl2HiX8ZqZq95v1+9cHtZPQCfZDoWQPybkNescLmXC7q5
-1kNTmEU=
-=8QM5
------END PGP PUBLIC KEY BLOCK-----
-', '
------BEGIN PGP PRIVATE KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-lQG7BELIIgoRBAC1onBpxKYgDvrgCaUWPY34947X3ogxGOfCN0p6Eqrx+2PUhm4n
-vFvmczpMT4iDc0mUO+iwnwsEkXQI1eC99g8c0jnZAvzJZ5miAHL8hukMAMfDkYke
-5aVvcPPc8uPDlItpszGmH0rM0V9TIt/i9QEXetpyNWhk4jj5qnohYhLeZwCgkOdO
-RFAdNi4vfFPivvtAp2ffjU8D/R3x/UJCvkzi7i9rQHGo313xxmQu5BuqIjANBUij
-8IE7LRPI/Qhg2hYy3sTJwImDi7VkS+fuvNVk0d6MTWplAXYU96bn12JaD21R9sKl
-Fzcc+0iZI1wYA1PczisUkoTISE+dQFUsoGHfpDLhoBuesXQrhBavI8t8VPd+nkdt
-J+oKA/9iRQ87FzxdYTkh2drrv69FZHc3Frsjw9nPcBq/voAvXH0MRilqyCg7HpW/
-T9naeOERksa+Rj4R57IF1l4e5oiiGJo9QmaKZcsCsXrREJCycrlEtMqXfSPy+bi5
-0yDZE/Qm1dwu13+OXOsRvkoNYjO8Mzo9K8wU12hMqN0a2bu6awAAn2F+iNBElfJS
-8azqO/kEiIfpqu6/DQG0I0VsZ2FtYWwgMjA0OCA8dGVzdDIwNDhAZXhhbXBsZS5v
-cmc+iF0EExECAB4FAkLIIgoCGwMGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQSOnN
-Vv6maNvTwwCYkpcJmpl3aHCQdGomz7dFohDgjgCgiThZt2xTEi6GhBB1vuhk+f55
-n3+dAj0EQsgiIhAIAJI3Gb2Ehtz1taQ9AhPY4Avad2BsqD3S5X/R11Cm0KBE/04D
-29dxn3f8QfxDsexYvNIZjoJPBqqZ7iMXMhoWyw8ZF5Zs1mLIjFGVorePrm94N3MN
-PWM7x9M36bHUjx0vCZKFIhcGY1g+htE/QweaJzNVeA5z4qZmik41FbQyQSyHa3bO
-kTZu++/U6ghP+iDp5UDBjMTkVyqITUVNgC+MR+da/I60irBVhue7younh4ovF+Cr
-VDQJC06HZl6CAJJyA81SmRfi+dmKbbjZLF6rhz0norPjISJvkIqvdtM4VPBKI5wp
-gwCzpEqjuiKrAVujRT68zvBvJ4aVqb11k5QdJscAAwUH/jVJh0HbWAoiFTe+Nvoh
-frA8vPcD0rtU3Y+siiqrabotnxJd2NuCbxghJYGfNtnx0KDjFbCRKJVeTFok4Unu
-VYhXdH/c6i0/rCTNdeW2D6pmR4GfBozRPw/ARf+jONawGLyUj7uq13iquwMSE7Vy
-NuF3ycL2OxXjgOWMjkH8c+zfHHpjaZ0RQsetMq/iNBWraayKZnWUd+eQqNzE+NUo
-7w1jAu7oDpy+8a1eipxzK+O0HfU5LTiFZ1Oe4Um0P2l3Xtx8nEgj4vSeoEkl2qun
-fGW00ZMMTCWabg0ZgxPzMfMeIcm6525AYn2qL+X/qBJTInAl7/hgPz2D1Yd7d5/R
-dWYAAVQKFPXbRaxbdArwRVXMzSD3qj/+VwwhwEDt8zmBGnlBfwVdkjQQrDUMmV1S
-EwyISQQYEQIACQUCQsgiIgIbDAAKCRBI6c1W/qZo25ZSAJ4sgUfHTVsG/x3p3fcM
-3b5R86qKEACggYKSwPWCs0YVRHOWqZY0pnHtLH8=
-=3Dgk
------END PGP PRIVATE KEY BLOCK-----
-');
-
-insert into keytbl (id, name, pubkey, seckey)
-values (3, 'elg4096', '
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-mQGiBELII7wRBACFuaAvb11cIvjJK9LkZr4cYuYhLWh3DJdojNNnLNiym5OEksvY
-05cw8OgqKtPzICU7o/mHXTWhzJYUt3i50/AeYygI8Q0uATS6RnDAKNlES1EMoHKz
-2a5iFbYs4bm4IwlkvYd8uWjcu+U0YLbxir39u+anIc6eT+q3WiH/q3zDRwCgkT98
-cnIG8iO8PdwDSP8G4Lt6TYED/R45GvCzJ4onQALLE92KkLUz8aFWSl05r84kczEN
-SxiP9Ss6m465RmwWHfwYAu4b+c4GeNyU8fIU2EM8cezchC+edEi3xu1s+pCV0Dk4
-18DGC8WKCICO30vBynuNmYg7W/7Zd4wtjss454fMW7+idVDNM701mmXBtI1nsBtG
-7Z4tA/9FxjFbJK9jh24RewfjHpLYqcfCo2SsUjOwsnMZ5yg2yv9KyVVQhRqwmrqt
-q8MRyjGmfoD9PPdCgvqgzy0hHvAHUtTm2zUczGTG+0g4hNIklxC/Mv6J4KE+NWTh
-uB4acqofHyaw2WnKOuRUsoDi6rG5AyjNMyAK/vVcEGj7J1tk27QjRWxnYW1hbCA0
-MDk2IDx0ZXN0NDA5NkBleGFtcGxlLm9yZz6IXgQTEQIAHgUCQsgjvAIbAwYLCQgH
-AwIDFQIDAxYCAQIeAQIXgAAKCRBj+HX2P2d0oAEDAJ9lI+CNmb42z3+a6TnVusM6
-FI7oLwCfUwA1zEcRdsT3nIkoYh0iKxFSDFW5BA0EQsgkdhAQAJQbLXlgcJ/jq+Xh
-Eujb77/eeftFJObNIRYD9fmJ7HFIXbUcknEpbs+cRH/nrj5dGSY3OT3jCXOUtvec
-sCoX/CpZWL0oqDjAiZtNSFiulw5Gav4gHYkWKgKdSo+2rkavEPqKIVHvMeXaJtGT
-d7v/AmL/P8T7gls93o5WFBOLtPbDvWqaKRy2U5TAhl1laiM0vGALRVjvSCgnGw9g
-FpSnXbO3AfenUSjDzZujfGLHtU44ixHSS/D4DepiF3YaYLsN4CBqZRv6FbMZD5W3
-DnJY4kS1kH0MzdcF19TlcZ3itTCcGIt1tMKf84mccPoqdMzH7vumBGTeFEly5Afp
-9berJcirqh2fzlunN0GS02z6SGWnjTbDlkNDxuxPSBbpcpNyD3jpYAUqSwRsZ/+5
-zkzcbGtDmvy9sJ5lAXkxGoIoQ1tEVX/LOHnh2NQHK8ourVOnr7MS0nozssITZJ5E
-XqtHiREjiYEuPyZiVZKJHLWuYYaF+n40znnz3sJuXFRreHhHbbvRdlYUU5mJV+XZ
-BLgKuS33NdpGeMIngnCc/9IQ6OZb6ixc94kbkd3w2PVr8CbKlu/IHTjWOO2mAo+D
-+OydlYl23FiM3KOyMP1HcEOJMB/nwkMtrvd+522Lu9n77ktKfot9IPrQDIQTyXjR
-3pCOFtCOBnk2tJHMPoG9jn9ah/LHAAMHEACDZ5I/MHGfmiKg2hrmqBu2J2j/deC8
-CpwcyDH1ovQ0gHvb9ESa+CVRU2Wdy2CD7Q9SmtMverB5eneL418iPVRcQdwRmQ2y
-IH4udlBa6ce9HTUCaecAZ4/tYBnaC0Av/9l9tz14eYcwRMDpB+bnkhgF+PZ1KAfD
-9wcY2aHbtsf3lZBc5h4owPJkxpe/BNzuJxW3q4VpSbLsZhwnCZ2wg7DRwP44wFIk
-00ptmoBY59gsU6I40XtzrF8JDr0cA57xND5RY21Z8lnnYRE1Tc8h5REps9ZIxW3/
-yl91404bPLqxczpUHQAMSTAmBaStPYX1nS51uofOhLs5SKPCUmxfGKIOhsD0oLUn
-78DnkONVGeXzBibSwwtbgfMzee4G8wSUfJ7w8WXz1TyanaGLnJ+DuKASSOrFoBCD
-HEDuWZWgSL74NOQupFRk0gxOPmqU94Y8HziQWma/cETbmD83q8rxN+GM2oBxQkQG
-xcbqMTHE7aVhV3tymbSWVaYhww3oIwsZS9oUIi1DnPEowS6CpVRrwdvLjLJnJzzV
-O3AFPn9eZ1Q7R1tNx+zZ4OOfhvI/OlRJ3HBx2L53embkbdY9gFYCCdTjPyjKoDIx
-kALgCajjCYMNUsAKNSd6mMCQ8TtvukSzkZS1RGKP27ohsdnzIVsiEAbxDMMcI4k1
-ul0LExUTCXSjeIhJBBgRAgAJBQJCyCR2AhsMAAoJEGP4dfY/Z3Sg19sAn0NDS8pb
-qrMpQAxSb7zRTmcXEFd9AJ435H0ttP/NhLHXC9ezgbCMmpXMOQ==
-=kRxT
------END PGP PUBLIC KEY BLOCK-----
-', '
------BEGIN PGP PRIVATE KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-lQG7BELII7wRBACFuaAvb11cIvjJK9LkZr4cYuYhLWh3DJdojNNnLNiym5OEksvY
-05cw8OgqKtPzICU7o/mHXTWhzJYUt3i50/AeYygI8Q0uATS6RnDAKNlES1EMoHKz
-2a5iFbYs4bm4IwlkvYd8uWjcu+U0YLbxir39u+anIc6eT+q3WiH/q3zDRwCgkT98
-cnIG8iO8PdwDSP8G4Lt6TYED/R45GvCzJ4onQALLE92KkLUz8aFWSl05r84kczEN
-SxiP9Ss6m465RmwWHfwYAu4b+c4GeNyU8fIU2EM8cezchC+edEi3xu1s+pCV0Dk4
-18DGC8WKCICO30vBynuNmYg7W/7Zd4wtjss454fMW7+idVDNM701mmXBtI1nsBtG
-7Z4tA/9FxjFbJK9jh24RewfjHpLYqcfCo2SsUjOwsnMZ5yg2yv9KyVVQhRqwmrqt
-q8MRyjGmfoD9PPdCgvqgzy0hHvAHUtTm2zUczGTG+0g4hNIklxC/Mv6J4KE+NWTh
-uB4acqofHyaw2WnKOuRUsoDi6rG5AyjNMyAK/vVcEGj7J1tk2wAAoJCUNy6awTkw
-XfbLbpqh0fvDst7jDLa0I0VsZ2FtYWwgNDA5NiA8dGVzdDQwOTZAZXhhbXBsZS5v
-cmc+iF4EExECAB4FAkLII7wCGwMGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQY/h1
-9j9ndKABAwCeNEOVK87EzXYbtxYBsnjrUI948NIAn2+f3BXiBFDV5NvqPwIZ0m77
-Fwy4nQRMBELIJHYQEACUGy15YHCf46vl4RLo2++/3nn7RSTmzSEWA/X5iexxSF21
-HJJxKW7PnER/564+XRkmNzk94wlzlLb3nLAqF/wqWVi9KKg4wImbTUhYrpcORmr+
-IB2JFioCnUqPtq5GrxD6iiFR7zHl2ibRk3e7/wJi/z/E+4JbPd6OVhQTi7T2w71q
-mikctlOUwIZdZWojNLxgC0VY70goJxsPYBaUp12ztwH3p1Eow82bo3xix7VOOIsR
-0kvw+A3qYhd2GmC7DeAgamUb+hWzGQ+Vtw5yWOJEtZB9DM3XBdfU5XGd4rUwnBiL
-dbTCn/OJnHD6KnTMx+77pgRk3hRJcuQH6fW3qyXIq6odn85bpzdBktNs+khlp402
-w5ZDQ8bsT0gW6XKTcg946WAFKksEbGf/uc5M3GxrQ5r8vbCeZQF5MRqCKENbRFV/
-yzh54djUByvKLq1Tp6+zEtJ6M7LCE2SeRF6rR4kRI4mBLj8mYlWSiRy1rmGGhfp+
-NM55897CblxUa3h4R2270XZWFFOZiVfl2QS4Crkt9zXaRnjCJ4JwnP/SEOjmW+os
-XPeJG5Hd8Nj1a/AmypbvyB041jjtpgKPg/jsnZWJdtxYjNyjsjD9R3BDiTAf58JD
-La73fudti7vZ++5LSn6LfSD60AyEE8l40d6QjhbQjgZ5NrSRzD6BvY5/WofyxwAD
-BxAAg2eSPzBxn5oioNoa5qgbtido/3XgvAqcHMgx9aL0NIB72/REmvglUVNlnctg
-g+0PUprTL3qweXp3i+NfIj1UXEHcEZkNsiB+LnZQWunHvR01AmnnAGeP7WAZ2gtA
-L//Zfbc9eHmHMETA6Qfm55IYBfj2dSgHw/cHGNmh27bH95WQXOYeKMDyZMaXvwTc
-7icVt6uFaUmy7GYcJwmdsIOw0cD+OMBSJNNKbZqAWOfYLFOiONF7c6xfCQ69HAOe
-8TQ+UWNtWfJZ52ERNU3PIeURKbPWSMVt/8pfdeNOGzy6sXM6VB0ADEkwJgWkrT2F
-9Z0udbqHzoS7OUijwlJsXxiiDobA9KC1J+/A55DjVRnl8wYm0sMLW4HzM3nuBvME
-lHye8PFl89U8mp2hi5yfg7igEkjqxaAQgxxA7lmVoEi++DTkLqRUZNIMTj5qlPeG
-PB84kFpmv3BE25g/N6vK8TfhjNqAcUJEBsXG6jExxO2lYVd7cpm0llWmIcMN6CML
-GUvaFCItQ5zxKMEugqVUa8Hby4yyZyc81TtwBT5/XmdUO0dbTcfs2eDjn4byPzpU
-Sdxwcdi+d3pm5G3WPYBWAgnU4z8oyqAyMZAC4Amo4wmDDVLACjUnepjAkPE7b7pE
-s5GUtURij9u6IbHZ8yFbIhAG8QzDHCOJNbpdCxMVEwl0o3gAAckBdfKuasiNUn5G
-L5XRnSvaOFzftr8zteOlZChCSNvzH5k+i1j7RJbWq06OeKRywPzjfjgM2MvRzI43
-ICeISQQYEQIACQUCQsgkdgIbDAAKCRBj+HX2P2d0oNfbAJ9+G3SeXrk+dWwo9EGi
-hqMi2GVTsgCfeoQJPsc8FLYUgfymc/3xqAVLUtg=
-=Gjq6
------END PGP PRIVATE KEY BLOCK-----
-');
-
-insert into keytbl (id, name, pubkey, seckey)
-values (4, 'rsa2048', '
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-mQELBELIJbEBCADAIdtcoLAmQfl8pb73pPRuEYx8qW9klLfCGG5A4OUOi00JHNwP
-ZaABe1PGzjoeXrgM1MTQZhoZu1Vdg+KDI6XAtiy9P6bLg7ntsXksD4wBoIKtQKc2
-55pdukxTiu+xeJJG2q8ZZPOp97CV9fbQ9vPCwgnuSsDCoQlibZikDVPAyVTvp7Jx
-5rz8yXsl4sxvaeMZPqqFPtA/ENeQ3cpsyR1BQXSvoZpH1Fq0b8GcZTEdWWD/w6/K
-MCRC8TmgEd+z3e8kIsCwFQ+TSHbCcxRWdgZE7gE31sJHHVkrZlXtLU8MPXWqslVz
-R0cX+yC8j6bXI6/BqZ2SvRndJwuunRAr4um7AAYptB5SU0EgMjA0OCA8cnNhMjA0
-OEBleGFtcGxlLm9yZz6JATQEEwECAB4FAkLIJbECGwMGCwkIBwMCAxUCAwMWAgEC
-HgECF4AACgkQnc+OnJvTHyQqHwf8DtzuAGmObfe3ggtn14x2wnU1Nigebe1K5liR
-nrLuVlLBpdO6CWmMUzfKRvyZlx54GlA9uUQSjW+RlgejdOTQqesDrcTEukYd4yzw
-bLZyM5Gb3lsE/FEmE7Dxw/0Utf59uACqzG8LACQn9J6sEgZWKxAupuYTHXd12lDP
-D3dnU4uzKPhMcjnSN00pzjusP7C9NZd3OLkAx2vw/dmb4Q+/QxeZhVYYsAUuR2hv
-9bgGWopumlOkt8Zu5YG6+CtTbJXprPI7pJ1jHbeE+q/29hWJQtS8Abx82AcOkzhv
-S3NZKoJ/1DrGgoDAu1mGkM4KvLAxfDs/qQ9dZhtEmDbKPLTVEA==
-=lR4n
------END PGP PUBLIC KEY BLOCK-----
-', '
------BEGIN PGP PRIVATE KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-lQOWBELIJbEBCADAIdtcoLAmQfl8pb73pPRuEYx8qW9klLfCGG5A4OUOi00JHNwP
-ZaABe1PGzjoeXrgM1MTQZhoZu1Vdg+KDI6XAtiy9P6bLg7ntsXksD4wBoIKtQKc2
-55pdukxTiu+xeJJG2q8ZZPOp97CV9fbQ9vPCwgnuSsDCoQlibZikDVPAyVTvp7Jx
-5rz8yXsl4sxvaeMZPqqFPtA/ENeQ3cpsyR1BQXSvoZpH1Fq0b8GcZTEdWWD/w6/K
-MCRC8TmgEd+z3e8kIsCwFQ+TSHbCcxRWdgZE7gE31sJHHVkrZlXtLU8MPXWqslVz
-R0cX+yC8j6bXI6/BqZ2SvRndJwuunRAr4um7AAYpAAf/QZsrrz0c7dgWwGqMIpw6
-fP+/lLa74+fa2CFRWtYowEiKsfDg/wN7Ua07036dNhPa8aZPsU6SRzm5PybKOURe
-D9pNt0FxJkX0j5pCWfjSJgTbc1rCdqZ/oyBk/U6pQtf//zfw3PbDl7I8TC6GOt2w
-5NgcXdsWHP7LAmPctOVUyzFsenevR0MFTHkMbmKI1HpFm8XN/e1Fl+qIAD+OagTF
-5B32VvpoJtkh5nxnIuToNJsa9Iy7F9MM2CeFOyTMihMcjXKBBUaAYoF115irBvqu
-7N/qWmzqLg8yxBZ56mh6meCF3+67VA2y7fL8rhw2QuqgLg1JFlKAVL+9crCSrn//
-GQQA1kT7FytW6BNOffblFYZkrJer3icoRDqa/ljgH/yVaWoVT1igy0E9XzYO7MwP
-2usj/resLy0NC1qCthk51cZ/wthooMl88e5Wb4l5FYwBEac7muSBTo4W8cAH1hFj
-TWL6XAGvEzGX3Mt9pn8uYGlQLZAhJoNCAU2EOCbN1PchDvsEAOWNKYesuUVk8+sQ
-St0NDNhd9BWtTWTHkCZb1dKC3JTfr9PqkTBLrWFbYjkOtvdPAW7FDaXXXZfdH1jH
-WfwP3Q+I6sqgSaWpCS4dBAns3/RVtO7czVgyIwma04iIvJqderYrfvkUq95KfwP2
-V8wXkhrPPPxyrg5y3wQlpY2jb5RBBAC17SK1ms+DBtck4vpdjp3SJ32SbyC/DU30
-89Q12j74S7Zdu1qZlKnvy3kWPYX/hMuSzGZ+mLVJNFEqH2X01aFzppYz0hdI9PGB
-9tTFEqZWQL9ZkXfjc79Cgnt12pNukRbtw0N/kyutOdIFHVT79wVAd+powqziXJsC
-Kc+4xjwSCkZitB5SU0EgMjA0OCA8cnNhMjA0OEBleGFtcGxlLm9yZz6JATQEEwEC
-AB4FAkLIJbECGwMGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQnc+OnJvTHyQqHwf8
-DtzuAGmObfe3ggtn14x2wnU1Nigebe1K5liRnrLuVlLBpdO6CWmMUzfKRvyZlx54
-GlA9uUQSjW+RlgejdOTQqesDrcTEukYd4yzwbLZyM5Gb3lsE/FEmE7Dxw/0Utf59
-uACqzG8LACQn9J6sEgZWKxAupuYTHXd12lDPD3dnU4uzKPhMcjnSN00pzjusP7C9
-NZd3OLkAx2vw/dmb4Q+/QxeZhVYYsAUuR2hv9bgGWopumlOkt8Zu5YG6+CtTbJXp
-rPI7pJ1jHbeE+q/29hWJQtS8Abx82AcOkzhvS3NZKoJ/1DrGgoDAu1mGkM4KvLAx
-fDs/qQ9dZhtEmDbKPLTVEA==
-=WKAv
------END PGP PRIVATE KEY BLOCK-----
-');
-
-insert into keytbl (id, name, pubkey, seckey)
-values (5, 'psw-elg1024', '
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-mQGiBELIIUgRBACp401L6jXrLB28c3YA4sM3OJKnxM1GT9YTkWyE3Vyte65H8WU9
-tGPBX7OMuaX5eGZ84LFUGvaP0k7anfmXcDkCO3P9GgL+ro/dS2Ps/vChQPZqHaxE
-xpKDUt47B7DGdRJrC8DRnIR4wbSyQA6ma3S1yFqC5pJhSs+mqf9eExOjiwCgntth
-klRxIYw352ZX9Ov9oht/p/ED/1Xi4PS+tkXVvyIw5aZfa61bT6XvDkoPI0Aj3GE5
-YmCHJlKA/IhEr8QJOLV++5VEv4l6KQ1/DFoJzoNdr1AGJukgTc6X/WcQRzfQtUic
-PHQme5oAWoHa6bVQZOwvbJh3mOXDq/Tk/KF22go8maM44vMn4bvv+SBbslviYLiL
-jZJ1A/9JXF1esNq+X9HehJyqHHU7LEEf/ck6zC7o2erM3/LZlZuLNPD2cv3oL3Nv
-saEgcTSZl+8XmO8pLmzjKIb+hi70qVx3t2IhMqbb4B/dMY1Ck62gPBKa81/Wwi7v
-IsEBQLEtyBmGmI64YpzoRNFeaaF9JY+sAKqROqe6dLjJ7vebQLQfRWxnYW1hbCAx
-MDI0IDx0ZXN0QGV4YW1wbGUub3JnPoheBBMRAgAeBQJCyCFIAhsDBgsJCAcDAgMV
-AgMDFgIBAh4BAheAAAoJEBwpvA0YF3NkOtsAniI9W2bC3CxARTpYrev7ihreDzFc
-AJ9WYLQxDQAi5Ec9AQoodPkIagzZ4LkBDQRCyCFKEAQAh5SNbbJMAsJ+sQbcWEzd
-ku8AdYB5zY7Qyf9EOvn0g39bzANhxmmb6gbRlQN0ioymlDwraTKUAfuCZgNcg/0P
-sxFGb9nDcvjIV8qdVpnq1PuzMFuBbmGI6weg7Pj01dlPiO0wt1lLX+SubktqbYxI
-+h31c3RDZqxj+KAgxR8YNGMAAwYD+wQs2He1Z5+p4OSgMERiNzF0acZUYmc0e+/9
-6gfL0ft3IP+SSFo6hEBrkKVhZKoPSSRr5KpNaEobhdxsnKjUaw/qyoaFcNMzb4sF
-k8wq5UlCkR+h72u6hv8FuleCV8SJUT1U2JjtlXJR2Pey9ifh8rZfu57UbdwdHa0v
-iWc4DilhiEkEGBECAAkFAkLIIUoCGwwACgkQHCm8DRgXc2TtrwCfdPom+HlNVE9F
-ig3hGY1Rb4NEk1gAn1u9IuQB+BgDP40YHHz6bKWS/x80
-=RWci
------END PGP PUBLIC KEY BLOCK-----
-', '
------BEGIN PGP PRIVATE KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-lQHhBELIIUgRBACp401L6jXrLB28c3YA4sM3OJKnxM1GT9YTkWyE3Vyte65H8WU9
-tGPBX7OMuaX5eGZ84LFUGvaP0k7anfmXcDkCO3P9GgL+ro/dS2Ps/vChQPZqHaxE
-xpKDUt47B7DGdRJrC8DRnIR4wbSyQA6ma3S1yFqC5pJhSs+mqf9eExOjiwCgntth
-klRxIYw352ZX9Ov9oht/p/ED/1Xi4PS+tkXVvyIw5aZfa61bT6XvDkoPI0Aj3GE5
-YmCHJlKA/IhEr8QJOLV++5VEv4l6KQ1/DFoJzoNdr1AGJukgTc6X/WcQRzfQtUic
-PHQme5oAWoHa6bVQZOwvbJh3mOXDq/Tk/KF22go8maM44vMn4bvv+SBbslviYLiL
-jZJ1A/9JXF1esNq+X9HehJyqHHU7LEEf/ck6zC7o2erM3/LZlZuLNPD2cv3oL3Nv
-saEgcTSZl+8XmO8pLmzjKIb+hi70qVx3t2IhMqbb4B/dMY1Ck62gPBKa81/Wwi7v
-IsEBQLEtyBmGmI64YpzoRNFeaaF9JY+sAKqROqe6dLjJ7vebQP4DAwL3TCgrYdj6
-+GAnoSqGa87twi8a6QRRYIlEx3ddUCDCjzkJmRfF+LFtvX3OtWWK0+Syi3kj2IK9
-YT7pF7QfRWxnYW1hbCAxMDI0IDx0ZXN0QGV4YW1wbGUub3JnPoheBBMRAgAeBQJC
-yCFIAhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEBwpvA0YF3NkOtsAn1ynoCyM
-6GIvHDOewwmF4Z/jGQfzAJ9Q+MwIubi0ASfJifaEM23sIHwHop0BVwRCyCFKEAQA
-h5SNbbJMAsJ+sQbcWEzdku8AdYB5zY7Qyf9EOvn0g39bzANhxmmb6gbRlQN0ioym
-lDwraTKUAfuCZgNcg/0PsxFGb9nDcvjIV8qdVpnq1PuzMFuBbmGI6weg7Pj01dlP
-iO0wt1lLX+SubktqbYxI+h31c3RDZqxj+KAgxR8YNGMAAwYD+wQs2He1Z5+p4OSg
-MERiNzF0acZUYmc0e+/96gfL0ft3IP+SSFo6hEBrkKVhZKoPSSRr5KpNaEobhdxs
-nKjUaw/qyoaFcNMzb4sFk8wq5UlCkR+h72u6hv8FuleCV8SJUT1U2JjtlXJR2Pey
-9ifh8rZfu57UbdwdHa0viWc4Dilh/gMDAvdMKCth2Pr4YCCPsELdgJuzhGfDNRSg
-nKMRWBWHSJRk6JmCjM1iJQNHc4mMhR8gvi2TeqYLOhYjcF7nr/LA+JvLV+adj/mI
-SQQYEQIACQUCQsghSgIbDAAKCRAcKbwNGBdzZO2vAJ4hRaLcNcdl/qK8rt0N5zbZ
-saCh6QCfR1O48O8nYN93SPSfIFZK5rEmdv8=
-=Y6Qv
------END PGP PRIVATE KEY BLOCK-----
-');
-
-insert into keytbl (id, name, pubkey, seckey)
-values (6, 'rsaenc2048', '
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-mQELBELr2m0BCADOrnknlnXI0EzRExf/TgoHvK7Xx/E0keWqV3KrOyC3/tY2KOrj
-UVxaAX5pkFX9wdQObGPIJm06u6D16CH6CildX/vxG7YgvvKzK8JGAbwrXAfk7OIW
-czO2zRaZGDynoK3mAxHRBReyTKtNv8rDQhuZs6AOozJNARdbyUO/yqUnqNNygWuT
-4htFDEuLPIJwAbMSD0BvFW6YQaPdxzaAZm3EWVNbwDzjgbBUdBiUUwRdZIFUhsjJ
-dirFdy5+uuZru6y6CNC1OERkJ7P8EyoFiZckAIE5gshVZzNuyLOZjc5DhWBvLbX4
-NZElAnfiv+4nA6y8wQLSIbmHA3nqJaBklj85AAYptCVSU0EgMjA0OCBFbmMgPHJz
-YTIwNDhlbmNAZXhhbXBsZS5vcmc+iQE0BBMBAgAeBQJC69ptAhsDBgsJCAcDAgMV
-AgMDFgIBAh4BAheAAAoJEMiZ6pNEGVVZHMkIAJtGHHZ9iM8Yq1rr0zl1L6SvlQP8
-JCaxHa31wH3PKqGtq2M+cpb2rXf7gAY/doHJPXggfVzkyFrysmQ1gPbDGYLyOutw
-+IkhihEb5bWxQBNj+3zAFs1YX6v2HXWbSUSmyY1V9/+NTtKk03olDc/swd3lXzku
-UOhcgfpBgIt3Q+MpT6M2+OIF7lVfSb1rWdpwTfGhZzW9szQOeoS4gPvxCCRyuabQ
-RJ6DWH61F8fFIDJg1z+A/Obx4fqX6GOA69RzgZ3oukFBIXxNwV9PZNnAmHtZVYO8
-0g/oVYBbuvOYedffDBeQarhERZ5W2TnIE+nqY61YOLBqosliygdZTXULzNi5AQsE
-QuvaugEIAOuCJZdkzORA6e1lr81Lnr4JzMsVBFA+X/yIkBbV6qX/A4nVSLAZKNPX
-z1YIrMTu+1rMIiy10IWbA6zgMTpzPhJRfgePONgdnCYyK5Ksh5/C5ntzKwwGwxfK
-lAXIxJurCHXTbEa+YvPdn76vJ3HsXOXVEL+fLb4U3l3Ng87YM202Lh1Ha2MeS2zE
-FZcAoKbFqAAjDLEai64SoOFh0W3CsD1DL4zmfp+YZrUPHTtZadsi53i4KKW/ws9U
-rHlolqYNhYze/uRLyfnUx9PN4r/GhEzauyDMV0smo91uB3aewPft+eCpmeWnu0PF
-JVK4xyRmhIq2rVCw16a1pBJirvGM+y0ABimJAR8EGAECAAkFAkLr2roCGwwACgkQ
-yJnqk0QZVVku1wgAg1bLSjPkhw+ldG5HzumpqR84+JKyozdJaJzefu2+1iqYE0B0
-WLz2PJVIiK41xiEkKhBvTOQYuXmtWqAWXptD91P5SoXoNJWLQO3TNwarANhHxkWg
-w/TOUxQqoctlRUej5NDD+4eW5G9lcS1FEGuKDWtX096u80vO+TbyJjvx2eVM1k+X
-dmeYsGOiNgDimCreJGYc14G7eY9jt24gw10n1sMAKI1qm6lcoHqZ9OOyla+wJdro
-PYZGO7R8+1O9R22WrK6BYDT5j/1JwMZqbOESjNvDEVT0yOHClCHRN4CChbt6LhKh
-CLUNdz/udIt0JAC6c/HdPLSW3HnmM3+iNj+Kug==
-=pwU2
------END PGP PUBLIC KEY BLOCK-----
-', '
------BEGIN PGP PRIVATE KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-lQOWBELr2m0BCADOrnknlnXI0EzRExf/TgoHvK7Xx/E0keWqV3KrOyC3/tY2KOrj
-UVxaAX5pkFX9wdQObGPIJm06u6D16CH6CildX/vxG7YgvvKzK8JGAbwrXAfk7OIW
-czO2zRaZGDynoK3mAxHRBReyTKtNv8rDQhuZs6AOozJNARdbyUO/yqUnqNNygWuT
-4htFDEuLPIJwAbMSD0BvFW6YQaPdxzaAZm3EWVNbwDzjgbBUdBiUUwRdZIFUhsjJ
-dirFdy5+uuZru6y6CNC1OERkJ7P8EyoFiZckAIE5gshVZzNuyLOZjc5DhWBvLbX4
-NZElAnfiv+4nA6y8wQLSIbmHA3nqJaBklj85AAYpAAf9GuKpxrXp267eSPw9ZeSw
-Ik6ob1I0MHbhhHeaXQnF0SuOViJ1+Bs74hUB3/F5fqrnjVLIS/ysYzegYpbpXOIa
-MZwYcp2e+dpmVb7tkGQgzXH0igGtBQBqoSUVq9mG2XKPVh2JmiYgOH6GrHSGmnCq
-GCgEK4ezSomB/3OtPFSjAxOlSw6dXSkapSxW3pEGvCdaWd9p8yl4rSpGsZEErPPL
-uSbZZrHtWfgq5UXdPeE1UnMlBcvSruvpN4qgWMgSMs4d2lXvzXJLcht/nryP+atT
-H1gwnRmlDCVv5BeJepKo3ORJDvcPlXkJPhqS9If3BhTqt6QgQEFI4aIYYZOZpZoi
-2QQA2Zckzktmsc1MS04zS9gm1CbxM9d2KK8EOlh7fycRQhYYqqavhTBH2MgEp+Dd
-ZtuEN5saNDe9x/fwi2ok1Bq6luGMWPZU/nZe7fxadzwfliy/qPzStWFW3vY9mMLu
-6uEqgjin/lf4YrAswXDZaEc5e4GuNgGfwr27hpjxE1jg3PsEAPMqXEOMT2yh+yRu
-DlLRbFhYOI4aUHY2CGoQQONnwv2O5gFvmOcPlg3J5lvnwlOYCx0c3bDxAtHyjPJq
-FAZqcJBaB9RDhKHwlWDrbx/6FPH2SuKE+u4msIhPFin4V3FAP+yTem/TKrdnaWy6
-EUrhCWTXVRTijBaCudfjFd/ipHZbA/0dv7UAcoWK6kiVLzyE+jOvtN+ZxTzxq7CW
-mlFPgAC966hgJmz9IXqadtMgPAoL3PK9q1DbPM3JhsQcJrNzTJqZrdN1/kPU0HHa
-+aof1BVy3wSvp2mXgaRUULStyhUIyBRM6hAYp3/MoWEYn/bwr+zQkIU8Zsk6OsZ6
-q1xE3cowrUWFtCVSU0EgMjA0OCBFbmMgPHJzYTIwNDhlbmNAZXhhbXBsZS5vcmc+
-iQE0BBMBAgAeBQJC69ptAhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEMiZ6pNE
-GVVZHMkIAJtGHHZ9iM8Yq1rr0zl1L6SvlQP8JCaxHa31wH3PKqGtq2M+cpb2rXf7
-gAY/doHJPXggfVzkyFrysmQ1gPbDGYLyOutw+IkhihEb5bWxQBNj+3zAFs1YX6v2
-HXWbSUSmyY1V9/+NTtKk03olDc/swd3lXzkuUOhcgfpBgIt3Q+MpT6M2+OIF7lVf
-Sb1rWdpwTfGhZzW9szQOeoS4gPvxCCRyuabQRJ6DWH61F8fFIDJg1z+A/Obx4fqX
-6GOA69RzgZ3oukFBIXxNwV9PZNnAmHtZVYO80g/oVYBbuvOYedffDBeQarhERZ5W
-2TnIE+nqY61YOLBqosliygdZTXULzNidA5YEQuvaugEIAOuCJZdkzORA6e1lr81L
-nr4JzMsVBFA+X/yIkBbV6qX/A4nVSLAZKNPXz1YIrMTu+1rMIiy10IWbA6zgMTpz
-PhJRfgePONgdnCYyK5Ksh5/C5ntzKwwGwxfKlAXIxJurCHXTbEa+YvPdn76vJ3Hs
-XOXVEL+fLb4U3l3Ng87YM202Lh1Ha2MeS2zEFZcAoKbFqAAjDLEai64SoOFh0W3C
-sD1DL4zmfp+YZrUPHTtZadsi53i4KKW/ws9UrHlolqYNhYze/uRLyfnUx9PN4r/G
-hEzauyDMV0smo91uB3aewPft+eCpmeWnu0PFJVK4xyRmhIq2rVCw16a1pBJirvGM
-+y0ABikAB/oC3z7lv6sVg+ngjbpWy9lZu2/ECZ9FqViVz7bUkjfvSuowgpncryLW
-4EpVV4U6mMSgU6kAi5VGT/BvYGSAtnqDWGiPs7Kk+h4Adz74bEAXzU280pNBtSfX
-tGvzlS4a376KzYFSCJDRBdMebEhJMbY0wQmR8lTZu5JSUI4YYEuN0c7ckdsw8w42
-QWTLonG8HC6h8UPKS0EAcaCo7tFubMIesU6cWuTYucsHE+wjbADjuSNX968qczNe
-NoL2BUznXOQoPu6HQO4/8cr7ib+VQkB2bHQcMoZazPUStIID1e4CL4XcxfuAmT8o
-3XDvMLgVqNp5W2f8Mzmk3/DbtsLXLOv5BADsCzQpseC8ikSYJC72hcon1wlUmGeH
-3qgGiiHhYXFa18xgI5juoO8DaWno0rPPlgr36Y8mSB5qjYHMXwjKnKyUmt11H+hU
-+6uk4hq3Rjd8l+vfuOSr1xoTrtBUg9Rwfw6JVo0DC+8CWg4oBWsLXVM6KQXPFdJs
-8kyFQplR/iP1XQQA/2tbDANjAYGNNDjJO9/0kEnSAUyYMasFJDrA2q17J5CroVQw
-QpMmWwdDkRANUVPKnWHS5sS65BRc7UytKe2f3A3ZInGXJIK2Hl+TzapWYcYxql+4
-ol5mEDDMDbhEE8Wmj9KyB6iifdLI0K+yxNb9T4Jpj3J18+St+G8+9AcFcBEEAM1b
-M9C+/05cnV8gjcByqH9M9ypo8fzPvMKVXWwCLQXpaL50QIkzLURkiMoEWrCdELaA
-sVPotRzePTIQ1ooLeDxd1gRnDqjZiIR0kwmv6vq8tfzY96O2ZbGWFI5eth89aWEJ
-WB8AR3zYcXpwJLwPuhXW2/NlZF0bclJ3jNzAfTIeQmeJAR8EGAECAAkFAkLr2roC
-GwwACgkQyJnqk0QZVVku1wgAg1bLSjPkhw+ldG5HzumpqR84+JKyozdJaJzefu2+
-1iqYE0B0WLz2PJVIiK41xiEkKhBvTOQYuXmtWqAWXptD91P5SoXoNJWLQO3TNwar
-ANhHxkWgw/TOUxQqoctlRUej5NDD+4eW5G9lcS1FEGuKDWtX096u80vO+TbyJjvx
-2eVM1k+XdmeYsGOiNgDimCreJGYc14G7eY9jt24gw10n1sMAKI1qm6lcoHqZ9OOy
-la+wJdroPYZGO7R8+1O9R22WrK6BYDT5j/1JwMZqbOESjNvDEVT0yOHClCHRN4CC
-hbt6LhKhCLUNdz/udIt0JAC6c/HdPLSW3HnmM3+iNj+Kug==
-=UKh3
------END PGP PRIVATE KEY BLOCK-----
-');
-
-
--- elg1024 / aes128
-insert into encdata (id, data) values (1, '
------BEGIN PGP MESSAGE-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-hQEOA9k2z2S7c/RmEAQAgVWW0DeLrZ+1thWJGBPp2WRFL9HeNqqWHbKJCXJbz1Uy
-faUY7yxVvG5Eutmo+JMiY3mg23/DgVVXHQZsTWpGvGM6djgUNGKUjZDbW6Nog7Mr
-e78IywattCOmgUP9vIwwg3OVjuDCN/nVirGQFnXpJBc8DzWqDMWRWDy1M0ZsK7AD
-/2JTosSFxUdpON0DKtIY3GLzmh6Nk3iV0g8VgJKUBT1rhCXuMDj3snm//EMm7hTY
-PlnObq4mIhgz8NqprmhooxnU0Kapofb3P3wCHPpU14zxhXY8iKO/3JhBq2uFcx4X
-uBMwkW4AdNxY/mzJZELteTL8Tr0s7PISk+owb4URpG3n0jsBc0CVULxrjh5Ejkdw
-wCM195J6+KbQxOOFQ0b3uOVvv4dEgd/hRERCOq5EPaFhlHegyYJ7YO842vnSDA==
-=PABx
------END PGP MESSAGE-----
-');
-
--- elg2048 / blowfish
-insert into encdata (id, data) values (2, '
------BEGIN PGP MESSAGE-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-hQIOAywibh/+XMfUEAf+OINhBngEsw4a/IJIeJvUgv1gTQzBwOdQEuc/runr4Oa8
-Skw/Bj0X/zgABVZLem1a35NHaNwaQaCFwMQ41YyWCu+jTdsiyX/Nw0w8LKKz0rNC
-vVpG6YuV7Turtsf8a5lXy1K0SHkLlgxQ6c76GS4gtSl5+bsL2+5R1gSRJ9NXqCQP
-OHRipEiYwBPqr5R21ZG0FXXNKGOGkj6jt/M/wh3WVtAhYuBI+HPKRfAEjd/Pu/eD
-e1zYtkH1dKKFmp44+nF0tTI274xpuso7ShfKYrOK3saFWrl0DWiWteUinjSA1YBY
-m7dG7NZ8PW+g1SZWhEoPjEEEHz3kWMvlKheMRDudnQf/dDyX6kZVIAQF/5B012hq
-QyVewgTGysowFIDn01uIewoEA9cASw699jw9IoJp+k5WZXnU+INllBLzQxniQCSu
-iEcr0x3fYqNtj9QBfbIqyRcY6HTWcmzyOUeGaSyX76j+tRAvtVtXpraFFFnaHB70
-YpXTjLkp8EBafzMghFaKDeXlr2TG/T7rbwcwWrFIwPqEAUKWN5m97Q3eyo8/ioMd
-YoFD64J9ovSsgbuU5IpIGAsjxK+NKzg/2STH7zZFEVCtgcIXsTHTZfiwS98/+1H9
-p1DIDaXIcUFV2ztmcKxh9gt2sXRz1W+x6D8O0k3nanU5yGG4miLKaq18fbcA0BD1
-+NIzAfelq6nvvxYKcGcamBMgLo5JkZOBHvyr6RsAKIT5QYc0QTjysTk9l0Am3gYc
-G2pAE+3k
-=TBHV
------END PGP MESSAGE-----
-');
-
--- elg4096 / aes256
-insert into encdata (id, data) values (3, '
------BEGIN PGP MESSAGE-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-hQQOA7aFBP0Sjh/5EA/+JCgncc8IZmmRjPStWnGf9tVJhgHTn+smIclibGzs0deS
-SPSCitzpblwbUDvu964+/5e5Q1l7rRuNN+AgETlEd4eppv7Swn2ChdgOXxRwukcT
-Nh3G+PTFvD4ayi7w1db3qvXIt0MwN4Alt436wJmK1oz2Ka9IcyO+wHWrDy1nSGSx
-z5x7YEj+EZPgWc/YAvudqE8Jpzd/OT5zSHN09UFkIAk6NxisKaIstbEGFgpqtoDZ
-1SJM84XAdL2IcaJ3YY7k/yzwlawhsakKd4GSd5vWmAwvyzzbSiBMfKsDE16ePLNU
-ZBF7CzmlCBPZ7YrFAHLpXBXXkCQvzD2BEYOjse50ZEfJ036T7950Ozcdy1EQbGon
-nyQ4Gh0PBpnMcBuiXOceWuYzhlzFOzDtlVKdNTxFRDcbEyW2jo9xQYvCCLnYy8EH
-2M7S8jCtVYJBbn63a82ELv+3+kWYcsvBJv2ZVBh4ncrBu9o0P+OYS7ApoOU+j6p2
-+t0RXHksqXS1YiUwYF5KSw09EbYMgNZ9G04Px/PxLU6fSC9iDrGX7Xt3kOUP0mku
-C518fPckT0zzRXqfFruJNRzDytW50KxkOQZzU1/Az1YlYN9QzWeU4EtLPb2fftZo
-D0qH/ln+f9Op5t6sD2fcxZVECU1b/bFtZsxvwH406YL+UQ7hU/XnZrzVVzODal8P
-/j1hg7v7BdJqu1DTp9nFWUuwMFcYAczuXn29IG183NZ7Ts4whDeYEhS8eNoLPX4j
-txY12ILD/w/3Q4LoW/hPa6OdfEzsn0U5GLf1WiGmJE1H6ft2U/xUnerc/u0kt+FU
-WAisArd4MuKtf7B5Vu/VF3kUdrR0hTniUKUivmC4o1jSId31Dufxj4aadVyldXAr
-6TNBcdyragZjxEZ6hsBCYzA0Rd1a8atd6OaQoIEEfAzCu5Ks29pydHErStYGjWJ1
-KA5KPLVvjbHpDmRhlCcm8vgpYQsBYEB5gE9fx5yCTlsVhCB6y23h7hfdMqerDqkO
-ZOPsO5h+tiHCdIrQ36sMjuINy1/K2rYcXd+Crh2iHcfidpU9fvDz2ihTRNQlhjuT
-0cQZM5JhctEx4VXF4LDctRhit7Hn0iqsk604woQfJVvP8O673xSXT/kBY0A/v9C0
-3C4YoFNeSaKwbfZQ/4u1ZFPJxK2IIJa8UGpyAUewLMlzGVVagljybv/f4Z9ERAhy
-huq5sMmw8UPsrJF2TUGHz5WSIwoh0J/qovoQI09I9sdEnFczDvRavMO2Mldy3E5i
-exz9oewtel6GOmsZQSYWT/vJzbYMmvHNmNpVwwoKrLV6oI3kyQ80GHBwI1WlwHoK
-2iRB0w8q4VVvJeYAz8ZIp380cqC3pfO0uZsrOx4g3k4X0jsB5y7rF5xXcZfnVbvG
-DYKcOy60/OHMWVvpw6trAoA+iP+cVWPtrbRvLglTVTfYmi1ToZDDipkALBhndQ==
-=L/M/
------END PGP MESSAGE-----
-');
-
--- rsaenc2048 / aes128
-insert into encdata (id, data) values (4, '
------BEGIN PGP MESSAGE-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-hQEMA/0CBsQJt0h1AQf+JyYnCiortj26P11zk28MKOGfWpWyAhuIgwbJXsdQ+e6r
-pEyyqs9GC6gI7SNF6+J8B/gsMwvkAL4FHAQCvA4ZZ6eeXR1Of4YG22JQGmpWVWZg
-DTyfhA2vkczuqfAD2tgUpMT6sdyGkQ/fnQ0lknlfHgC5GRx7aavOoAKtMqiZW5PR
-yae/qR48mjX7Mb+mLvbagv9mHEgQSmHwFpaq2k456BbcZ23bvCmBnCvqV/90Ggfb
-VP6gkSoFVsJ19RHsOhW1dk9ehbl51WB3zUOO5FZWwUTY9DJvKblRK/frF0+CXjE4
-HfcZXHSpSjx4haGGTsMvEJ85qFjZpr0eTGOdY5cFhNJAAVP8MZfji7OhPRAoOOIK
-eRGOCkao12pvPyFTFnPd5vqmyBbdNpK4Q0hS82ljugMJvM0p3vJZVzW402Kz6iBL
-GQ==
-=XHkF
------END PGP MESSAGE-----
-');
-
--- successful decrypt
-select pgp_pub_decrypt(dearmor(data), dearmor(seckey))
-from keytbl, encdata where keytbl.id=1 and encdata.id=1;
-
-select pgp_pub_decrypt(dearmor(data), dearmor(seckey))
-from keytbl, encdata where keytbl.id=2 and encdata.id=2;
-
-select pgp_pub_decrypt(dearmor(data), dearmor(seckey))
-from keytbl, encdata where keytbl.id=3 and encdata.id=3;
-
-select pgp_pub_decrypt(dearmor(data), dearmor(seckey))
-from keytbl, encdata where keytbl.id=6 and encdata.id=4;
-
--- wrong key
-select pgp_pub_decrypt(dearmor(data), dearmor(seckey))
-from keytbl, encdata where keytbl.id=2 and encdata.id=1;
-
--- sign-only key
-select pgp_pub_decrypt(dearmor(data), dearmor(seckey))
-from keytbl, encdata where keytbl.id=4 and encdata.id=1;
-
--- password-protected secret key, no password
-select pgp_pub_decrypt(dearmor(data), dearmor(seckey))
-from keytbl, encdata where keytbl.id=5 and encdata.id=1;
-
--- password-protected secret key, wrong password
-select pgp_pub_decrypt(dearmor(data), dearmor(seckey), 'foo')
-from keytbl, encdata where keytbl.id=5 and encdata.id=1;
-
--- password-protected secret key, right password
-select pgp_pub_decrypt(dearmor(data), dearmor(seckey), 'parool')
-from keytbl, encdata where keytbl.id=5 and encdata.id=1;
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/pgp-pubkey-encrypt.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/pgp-pubkey-encrypt.sql b/contrib/pgcrypto/sql/pgp-pubkey-encrypt.sql
deleted file mode 100644
index 62dd487..0000000
--- a/contrib/pgcrypto/sql/pgp-pubkey-encrypt.sql
+++ /dev/null
@@ -1,50 +0,0 @@
---
--- PGP Public Key Encryption
---
-
--- successful encrypt/decrypt
-select pgp_pub_decrypt(
- pgp_pub_encrypt('Secret msg', dearmor(pubkey)),
- dearmor(seckey))
-from keytbl where keytbl.id=1;
-
-select pgp_pub_decrypt(
- pgp_pub_encrypt('Secret msg', dearmor(pubkey)),
- dearmor(seckey))
-from keytbl where keytbl.id=2;
-
-select pgp_pub_decrypt(
- pgp_pub_encrypt('Secret msg', dearmor(pubkey)),
- dearmor(seckey))
-from keytbl where keytbl.id=3;
-
-select pgp_pub_decrypt(
- pgp_pub_encrypt('Secret msg', dearmor(pubkey)),
- dearmor(seckey))
-from keytbl where keytbl.id=6;
-
--- try with rsa-sign only
-select pgp_pub_decrypt(
- pgp_pub_encrypt('Secret msg', dearmor(pubkey)),
- dearmor(seckey))
-from keytbl where keytbl.id=4;
-
--- try with secret key
-select pgp_pub_decrypt(
- pgp_pub_encrypt('Secret msg', dearmor(seckey)),
- dearmor(seckey))
-from keytbl where keytbl.id=1;
-
--- does text-to-bytea works
-select pgp_pub_decrypt_bytea(
- pgp_pub_encrypt('Secret msg', dearmor(pubkey)),
- dearmor(seckey))
-from keytbl where keytbl.id=1;
-
--- and bytea-to-text?
-select pgp_pub_decrypt(
- pgp_pub_encrypt_bytea('Secret msg', dearmor(pubkey)),
- dearmor(seckey))
-from keytbl where keytbl.id=1;
-
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/pgp-zlib-DISABLED.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/pgp-zlib-DISABLED.sql b/contrib/pgcrypto/sql/pgp-zlib-DISABLED.sql
deleted file mode 100644
index 85c2468..0000000
--- a/contrib/pgcrypto/sql/pgp-zlib-DISABLED.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-
--- zlib is disabled
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/rijndael.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/rijndael.sql b/contrib/pgcrypto/sql/rijndael.sql
deleted file mode 100644
index 4d6af0f..0000000
--- a/contrib/pgcrypto/sql/rijndael.sql
+++ /dev/null
@@ -1,62 +0,0 @@
---
--- AES / Rijndael-128 cipher
---
-
--- some standard Rijndael testvalues
-SELECT encode(encrypt(
-decode('00112233445566778899aabbccddeeff', 'hex'),
-decode('000102030405060708090a0b0c0d0e0f', 'hex'),
-'aes-ecb/pad:none'), 'hex');
-
-SELECT encode(encrypt(
-decode('00112233445566778899aabbccddeeff', 'hex'),
-decode('000102030405060708090a0b0c0d0e0f1011121314151617', 'hex'),
-'aes-ecb/pad:none'), 'hex');
-
-SELECT encode(encrypt(
-decode('00112233445566778899aabbccddeeff', 'hex'),
-decode('000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f', 'hex'),
-'aes-ecb/pad:none'), 'hex');
-
--- cbc
-SELECT encode(encrypt(
-decode('00112233445566778899aabbccddeeff', 'hex'),
-decode('000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f', 'hex'),
-'aes-cbc/pad:none'), 'hex');
-
--- key padding
-
-SELECT encode(encrypt(
-decode('0011223344', 'hex'),
-decode('000102030405', 'hex'),
-'aes-cbc'), 'hex');
-
-SELECT encode(encrypt(
-decode('0011223344', 'hex'),
-decode('000102030405060708090a0b0c0d0e0f10111213', 'hex'),
-'aes-cbc'), 'hex');
-
-SELECT encode(encrypt(
-decode('0011223344', 'hex'),
-decode('000102030405060708090a0b0c0d0e0f101112131415161718191a1b', 'hex'),
-'aes-cbc'), 'hex');
-
--- empty data
-select encode( encrypt('', 'foo', 'aes'), 'hex');
--- 10 bytes key
-select encode( encrypt('foo', '0123456789', 'aes'), 'hex');
--- 22 bytes key
-select encode( encrypt('foo', '0123456789012345678901', 'aes'), 'hex');
-
--- decrypt
-select decrypt(encrypt('foo', '0123456', 'aes'), '0123456', 'aes');
-
--- iv
-select encode(encrypt_iv('foo', '0123456', 'abcd', 'aes'), 'hex');
-select decrypt_iv(decode('2c24cb7da91d6d5699801268b0f5adad', 'hex'),
- '0123456', 'abcd', 'aes');
-
--- long message
-select encode(encrypt('Lets try a longer message.', '0123456789', 'aes'), 'hex');
-select decrypt(encrypt('Lets try a longer message.', '0123456789', 'aes'), '0123456789', 'aes');
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/sha1.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/sha1.sql b/contrib/pgcrypto/sql/sha1.sql
deleted file mode 100644
index 6a398b4..0000000
--- a/contrib/pgcrypto/sql/sha1.sql
+++ /dev/null
@@ -1,12 +0,0 @@
---
--- SHA1 message digest
---
-
-SELECT encode(digest('', 'sha1'), 'hex');
-SELECT encode(digest('a', 'sha1'), 'hex');
-SELECT encode(digest('abc', 'sha1'), 'hex');
-SELECT encode(digest('message digest', 'sha1'), 'hex');
-SELECT encode(digest('abcdefghijklmnopqrstuvwxyz', 'sha1'), 'hex');
-SELECT encode(digest('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'sha1'), 'hex');
-SELECT encode(digest('12345678901234567890123456789012345678901234567890123456789012345678901234567890', 'sha1'), 'hex');
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/sha2.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/sha2.sql b/contrib/pgcrypto/sql/sha2.sql
deleted file mode 100644
index f1d0ca6..0000000
--- a/contrib/pgcrypto/sql/sha2.sql
+++ /dev/null
@@ -1,28 +0,0 @@
---
--- SHA2 family
---
-
--- SHA256
-SELECT encode(digest('', 'sha256'), 'hex');
-SELECT encode(digest('a', 'sha256'), 'hex');
-SELECT encode(digest('abc', 'sha256'), 'hex');
-SELECT encode(digest('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', 'sha256'), 'hex');
-SELECT encode(digest('12345678901234567890123456789012345678901234567890123456789012345678901234567890', 'sha256'), 'hex');
-
--- SHA384
-SELECT encode(digest('', 'sha384'), 'hex');
-SELECT encode(digest('a', 'sha384'), 'hex');
-SELECT encode(digest('abc', 'sha384'), 'hex');
-SELECT encode(digest('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', 'sha384'), 'hex');
-SELECT encode(digest('abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu', 'sha384'), 'hex');
-SELECT encode(digest('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz', 'sha384'), 'hex');
-
--- SHA512
-SELECT encode(digest('', 'sha512'), 'hex');
-SELECT encode(digest('a', 'sha512'), 'hex');
-SELECT encode(digest('abc', 'sha512'), 'hex');
-SELECT encode(digest('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', 'sha512'), 'hex');
-SELECT encode(digest('abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu', 'sha512'), 'hex');
-SELECT encode(digest('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz', 'sha512'), 'hex');
-
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/uninstall_pgcrypto.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/uninstall_pgcrypto.sql b/contrib/pgcrypto/uninstall_pgcrypto.sql
deleted file mode 100644
index a2891f6..0000000
--- a/contrib/pgcrypto/uninstall_pgcrypto.sql
+++ /dev/null
@@ -1,46 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/pgcrypto/uninstall_pgcrypto.sql,v 1.4 2007/11/13 04:24:28 momjian Exp $ */
-
--- Adjust this setting to control where the objects get dropped.
-SET search_path = public;
-
-DROP FUNCTION digest(text, text);
-DROP FUNCTION digest(bytea, text);
-
-DROP FUNCTION hmac(text, text, text);
-DROP FUNCTION hmac(bytea, bytea, text);
-
-DROP FUNCTION crypt(text, text);
-DROP FUNCTION gen_salt(text);
-DROP FUNCTION gen_salt(text, int4);
-
-DROP FUNCTION encrypt(bytea, bytea, text);
-DROP FUNCTION decrypt(bytea, bytea, text);
-DROP FUNCTION encrypt_iv(bytea, bytea, bytea, text);
-DROP FUNCTION decrypt_iv(bytea, bytea, bytea, text);
-
-DROP FUNCTION gen_random_bytes(int4);
-
-DROP FUNCTION pgp_sym_encrypt(text, text);
-DROP FUNCTION pgp_sym_encrypt_bytea(bytea, text);
-DROP FUNCTION pgp_sym_encrypt(text, text, text);
-DROP FUNCTION pgp_sym_encrypt_bytea(bytea, text, text);
-DROP FUNCTION pgp_sym_decrypt(bytea, text);
-DROP FUNCTION pgp_sym_decrypt_bytea(bytea, text);
-DROP FUNCTION pgp_sym_decrypt(bytea, text, text);
-DROP FUNCTION pgp_sym_decrypt_bytea(bytea, text, text);
-
-DROP FUNCTION pgp_pub_encrypt(text, bytea);
-DROP FUNCTION pgp_pub_encrypt_bytea(bytea, bytea);
-DROP FUNCTION pgp_pub_encrypt(text, bytea, text);
-DROP FUNCTION pgp_pub_encrypt_bytea(bytea, bytea, text);
-DROP FUNCTION pgp_pub_decrypt(bytea, bytea);
-DROP FUNCTION pgp_pub_decrypt_bytea(bytea, bytea);
-DROP FUNCTION pgp_pub_decrypt(bytea, bytea, text);
-DROP FUNCTION pgp_pub_decrypt_bytea(bytea, bytea, text);
-DROP FUNCTION pgp_pub_decrypt(bytea, bytea, text, text);
-DROP FUNCTION pgp_pub_decrypt_bytea(bytea, bytea, text, text);
-
-DROP FUNCTION pgp_key_id(bytea);
-DROP FUNCTION armor(bytea);
-DROP FUNCTION dearmor(text);
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index f802686..e062ec3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -77,7 +77,6 @@
<exclude>Makefile</exclude>
<exclude>config/*</exclude> <!-- This one is tricky since it is actually GPL -->
<exclude>src/makefiles/*</exclude>
- <exclude>contrib/pgcrypto/**/*</exclude>
<exclude>src/DEVELOPERS</exclude>
<exclude>src/backend/catalog/Makefile</exclude>
<exclude>src/backend/port/beos/*.c</exclude>
[10/11] incubator-hawq git commit: HAWQ-394. Remove pgcrypto from
code base
Posted by hu...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/crypt-des.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/crypt-des.c b/contrib/pgcrypto/crypt-des.c
deleted file mode 100644
index 0337bfc..0000000
--- a/contrib/pgcrypto/crypt-des.c
+++ /dev/null
@@ -1,775 +0,0 @@
-/*
- * FreeSec: libcrypt for NetBSD
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/crypt-des.c,v 1.15 2006/07/13 04:15:24 neilc Exp $
- *
- * Copyright (c) 1994 David Burren
- * All rights reserved.
- *
- * Adapted for FreeBSD-2.0 by Geoffrey M. Rehmet
- * this file should now *only* export crypt(), in order to make
- * binaries of libcrypt exportable from the USA
- *
- * Adapted for FreeBSD-4.0 by Mark R V Murray
- * this file should now *only* export crypt_des(), in order to make
- * a module that can be optionally included in libcrypt.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of other contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/secure/lib/libcrypt/crypt-des.c,v 1.12 1999/09/20 12:39:20 markm Exp $
- *
- * This is an original implementation of the DES and the crypt(3) interfaces
- * by David Burren <da...@werj.com.au>.
- *
- * An excellent reference on the underlying algorithm (and related
- * algorithms) is:
- *
- * B. Schneier, Applied Cryptography: protocols, algorithms,
- * and source code in C, John Wiley & Sons, 1994.
- *
- * Note that in that book's description of DES the lookups for the initial,
- * pbox, and final permutations are inverted (this has been brought to the
- * attention of the author). A list of errata for this book has been
- * posted to the sci.crypt newsgroup by the author and is available for FTP.
- *
- * ARCHITECTURE ASSUMPTIONS:
- * It is assumed that the 8-byte arrays passed by reference can be
- * addressed as arrays of uint32's (ie. the CPU is not picky about
- * alignment).
- */
-
-#include "postgres.h"
-
-#include "px.h"
-#include "px-crypt.h"
-
-/* for ntohl/htonl */
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#define _PASSWORD_EFMT1 '_'
-
-static const char _crypt_a64[] =
-"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-
-static uint8 IP[64] = {
- 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4,
- 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8,
- 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3,
- 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7
-};
-
-static uint8 inv_key_perm[64];
-static uint8 u_key_perm[56];
-static uint8 key_perm[56] = {
- 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18,
- 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36,
- 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22,
- 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4
-};
-
-static uint8 key_shifts[16] = {
- 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
-};
-
-static uint8 inv_comp_perm[56];
-static uint8 comp_perm[48] = {
- 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10,
- 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2,
- 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48,
- 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32
-};
-
-/*
- * No E box is used, as it's replaced by some ANDs, shifts, and ORs.
- */
-
-static uint8 u_sbox[8][64];
-static uint8 sbox[8][64] = {
- {
- 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,
- 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,
- 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,
- 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13
- },
- {
- 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10,
- 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5,
- 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,
- 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9
- },
- {
- 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,
- 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,
- 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7,
- 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12
- },
- {
- 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,
- 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,
- 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4,
- 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14
- },
- {
- 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9,
- 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6,
- 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14,
- 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3
- },
- {
- 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11,
- 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8,
- 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6,
- 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13
- },
- {
- 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1,
- 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6,
- 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2,
- 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12
- },
- {
- 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7,
- 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2,
- 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8,
- 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11
- }
-};
-
-static uint8 un_pbox[32];
-static uint8 pbox[32] = {
- 16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10,
- 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25
-};
-
-static uint32 _crypt_bits32[32] =
-{
- 0x80000000, 0x40000000, 0x20000000, 0x10000000,
- 0x08000000, 0x04000000, 0x02000000, 0x01000000,
- 0x00800000, 0x00400000, 0x00200000, 0x00100000,
- 0x00080000, 0x00040000, 0x00020000, 0x00010000,
- 0x00008000, 0x00004000, 0x00002000, 0x00001000,
- 0x00000800, 0x00000400, 0x00000200, 0x00000100,
- 0x00000080, 0x00000040, 0x00000020, 0x00000010,
- 0x00000008, 0x00000004, 0x00000002, 0x00000001
-};
-
-static uint8 _crypt_bits8[8] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
-
-static uint32 saltbits;
-static long old_salt;
-static uint32 *bits28,
- *bits24;
-static uint8 init_perm[64],
- final_perm[64];
-static uint32 en_keysl[16],
- en_keysr[16];
-static uint32 de_keysl[16],
- de_keysr[16];
-static int des_initialised = 0;
-static uint8 m_sbox[4][4096];
-static uint32 psbox[4][256];
-static uint32 ip_maskl[8][256],
- ip_maskr[8][256];
-static uint32 fp_maskl[8][256],
- fp_maskr[8][256];
-static uint32 key_perm_maskl[8][128],
- key_perm_maskr[8][128];
-static uint32 comp_maskl[8][128],
- comp_maskr[8][128];
-static uint32 old_rawkey0,
- old_rawkey1;
-
-static inline int
-ascii_to_bin(char ch)
-{
- if (ch > 'z')
- return (0);
- if (ch >= 'a')
- return (ch - 'a' + 38);
- if (ch > 'Z')
- return (0);
- if (ch >= 'A')
- return (ch - 'A' + 12);
- if (ch > '9')
- return (0);
- if (ch >= '.')
- return (ch - '.');
- return (0);
-}
-
-static void
-des_init(void)
-{
- int i,
- j,
- b,
- k,
- inbit,
- obit;
- uint32 *p,
- *il,
- *ir,
- *fl,
- *fr;
-
- old_rawkey0 = old_rawkey1 = 0L;
- saltbits = 0L;
- old_salt = 0L;
- bits24 = (bits28 = _crypt_bits32 + 4) + 4;
-
- /*
- * Invert the S-boxes, reordering the input bits.
- */
- for (i = 0; i < 8; i++)
- for (j = 0; j < 64; j++)
- {
- b = (j & 0x20) | ((j & 1) << 4) | ((j >> 1) & 0xf);
- u_sbox[i][j] = sbox[i][b];
- }
-
- /*
- * Convert the inverted S-boxes into 4 arrays of 8 bits. Each will handle
- * 12 bits of the S-box input.
- */
- for (b = 0; b < 4; b++)
- for (i = 0; i < 64; i++)
- for (j = 0; j < 64; j++)
- m_sbox[b][(i << 6) | j] =
- (u_sbox[(b << 1)][i] << 4) |
- u_sbox[(b << 1) + 1][j];
-
- /*
- * Set up the initial & final permutations into a useful form, and
- * initialise the inverted key permutation.
- */
- for (i = 0; i < 64; i++)
- {
- init_perm[final_perm[i] = IP[i] - 1] = i;
- inv_key_perm[i] = 255;
- }
-
- /*
- * Invert the key permutation and initialise the inverted key compression
- * permutation.
- */
- for (i = 0; i < 56; i++)
- {
- u_key_perm[i] = key_perm[i] - 1;
- inv_key_perm[key_perm[i] - 1] = i;
- inv_comp_perm[i] = 255;
- }
-
- /*
- * Invert the key compression permutation.
- */
- for (i = 0; i < 48; i++)
- inv_comp_perm[comp_perm[i] - 1] = i;
-
- /*
- * Set up the OR-mask arrays for the initial and final permutations, and
- * for the key initial and compression permutations.
- */
- for (k = 0; k < 8; k++)
- {
- for (i = 0; i < 256; i++)
- {
- *(il = &ip_maskl[k][i]) = 0L;
- *(ir = &ip_maskr[k][i]) = 0L;
- *(fl = &fp_maskl[k][i]) = 0L;
- *(fr = &fp_maskr[k][i]) = 0L;
- for (j = 0; j < 8; j++)
- {
- inbit = 8 * k + j;
- if (i & _crypt_bits8[j])
- {
- if ((obit = init_perm[inbit]) < 32)
- *il |= _crypt_bits32[obit];
- else
- *ir |= _crypt_bits32[obit - 32];
- if ((obit = final_perm[inbit]) < 32)
- *fl |= _crypt_bits32[obit];
- else
- *fr |= _crypt_bits32[obit - 32];
- }
- }
- }
- for (i = 0; i < 128; i++)
- {
- *(il = &key_perm_maskl[k][i]) = 0L;
- *(ir = &key_perm_maskr[k][i]) = 0L;
- for (j = 0; j < 7; j++)
- {
- inbit = 8 * k + j;
- if (i & _crypt_bits8[j + 1])
- {
- if ((obit = inv_key_perm[inbit]) == 255)
- continue;
- if (obit < 28)
- *il |= bits28[obit];
- else
- *ir |= bits28[obit - 28];
- }
- }
- *(il = &comp_maskl[k][i]) = 0L;
- *(ir = &comp_maskr[k][i]) = 0L;
- for (j = 0; j < 7; j++)
- {
- inbit = 7 * k + j;
- if (i & _crypt_bits8[j + 1])
- {
- if ((obit = inv_comp_perm[inbit]) == 255)
- continue;
- if (obit < 24)
- *il |= bits24[obit];
- else
- *ir |= bits24[obit - 24];
- }
- }
- }
- }
-
- /*
- * Invert the P-box permutation, and convert into OR-masks for handling
- * the output of the S-box arrays setup above.
- */
- for (i = 0; i < 32; i++)
- un_pbox[pbox[i] - 1] = i;
-
- for (b = 0; b < 4; b++)
- for (i = 0; i < 256; i++)
- {
- *(p = &psbox[b][i]) = 0L;
- for (j = 0; j < 8; j++)
- {
- if (i & _crypt_bits8[j])
- *p |= _crypt_bits32[un_pbox[8 * b + j]];
- }
- }
-
- des_initialised = 1;
-}
-
-static void
-setup_salt(long salt)
-{
- uint32 obit,
- saltbit;
- int i;
-
- if (salt == old_salt)
- return;
- old_salt = salt;
-
- saltbits = 0L;
- saltbit = 1;
- obit = 0x800000;
- for (i = 0; i < 24; i++)
- {
- if (salt & saltbit)
- saltbits |= obit;
- saltbit <<= 1;
- obit >>= 1;
- }
-}
-
-static int
-des_setkey(const char *key)
-{
- uint32 k0,
- k1,
- rawkey0,
- rawkey1;
- int shifts,
- round;
-
- if (!des_initialised)
- des_init();
-
- rawkey0 = ntohl(*(uint32 *) key);
- rawkey1 = ntohl(*(uint32 *) (key + 4));
-
- if ((rawkey0 | rawkey1)
- && rawkey0 == old_rawkey0
- && rawkey1 == old_rawkey1)
- {
- /*
- * Already setup for this key. This optimisation fails on a zero key
- * (which is weak and has bad parity anyway) in order to simplify the
- * starting conditions.
- */
- return (0);
- }
- old_rawkey0 = rawkey0;
- old_rawkey1 = rawkey1;
-
- /*
- * Do key permutation and split into two 28-bit subkeys.
- */
- k0 = key_perm_maskl[0][rawkey0 >> 25]
- | key_perm_maskl[1][(rawkey0 >> 17) & 0x7f]
- | key_perm_maskl[2][(rawkey0 >> 9) & 0x7f]
- | key_perm_maskl[3][(rawkey0 >> 1) & 0x7f]
- | key_perm_maskl[4][rawkey1 >> 25]
- | key_perm_maskl[5][(rawkey1 >> 17) & 0x7f]
- | key_perm_maskl[6][(rawkey1 >> 9) & 0x7f]
- | key_perm_maskl[7][(rawkey1 >> 1) & 0x7f];
- k1 = key_perm_maskr[0][rawkey0 >> 25]
- | key_perm_maskr[1][(rawkey0 >> 17) & 0x7f]
- | key_perm_maskr[2][(rawkey0 >> 9) & 0x7f]
- | key_perm_maskr[3][(rawkey0 >> 1) & 0x7f]
- | key_perm_maskr[4][rawkey1 >> 25]
- | key_perm_maskr[5][(rawkey1 >> 17) & 0x7f]
- | key_perm_maskr[6][(rawkey1 >> 9) & 0x7f]
- | key_perm_maskr[7][(rawkey1 >> 1) & 0x7f];
-
- /*
- * Rotate subkeys and do compression permutation.
- */
- shifts = 0;
- for (round = 0; round < 16; round++)
- {
- uint32 t0,
- t1;
-
- shifts += key_shifts[round];
-
- t0 = (k0 << shifts) | (k0 >> (28 - shifts));
- t1 = (k1 << shifts) | (k1 >> (28 - shifts));
-
- de_keysl[15 - round] =
- en_keysl[round] = comp_maskl[0][(t0 >> 21) & 0x7f]
- | comp_maskl[1][(t0 >> 14) & 0x7f]
- | comp_maskl[2][(t0 >> 7) & 0x7f]
- | comp_maskl[3][t0 & 0x7f]
- | comp_maskl[4][(t1 >> 21) & 0x7f]
- | comp_maskl[5][(t1 >> 14) & 0x7f]
- | comp_maskl[6][(t1 >> 7) & 0x7f]
- | comp_maskl[7][t1 & 0x7f];
-
- de_keysr[15 - round] =
- en_keysr[round] = comp_maskr[0][(t0 >> 21) & 0x7f]
- | comp_maskr[1][(t0 >> 14) & 0x7f]
- | comp_maskr[2][(t0 >> 7) & 0x7f]
- | comp_maskr[3][t0 & 0x7f]
- | comp_maskr[4][(t1 >> 21) & 0x7f]
- | comp_maskr[5][(t1 >> 14) & 0x7f]
- | comp_maskr[6][(t1 >> 7) & 0x7f]
- | comp_maskr[7][t1 & 0x7f];
- }
- return (0);
-}
-
-static int
-do_des(uint32 l_in, uint32 r_in, uint32 *l_out, uint32 *r_out, int count)
-{
- /*
- * l_in, r_in, l_out, and r_out are in pseudo-"big-endian" format.
- */
- uint32 l,
- r,
- *kl,
- *kr,
- *kl1,
- *kr1;
- uint32 f,
- r48l,
- r48r;
- int round;
-
- if (count == 0)
- return (1);
- else if (count > 0)
- {
- /*
- * Encrypting
- */
- kl1 = en_keysl;
- kr1 = en_keysr;
- }
- else
- {
- /*
- * Decrypting
- */
- count = -count;
- kl1 = de_keysl;
- kr1 = de_keysr;
- }
-
- /*
- * Do initial permutation (IP).
- */
- l = ip_maskl[0][l_in >> 24]
- | ip_maskl[1][(l_in >> 16) & 0xff]
- | ip_maskl[2][(l_in >> 8) & 0xff]
- | ip_maskl[3][l_in & 0xff]
- | ip_maskl[4][r_in >> 24]
- | ip_maskl[5][(r_in >> 16) & 0xff]
- | ip_maskl[6][(r_in >> 8) & 0xff]
- | ip_maskl[7][r_in & 0xff];
- r = ip_maskr[0][l_in >> 24]
- | ip_maskr[1][(l_in >> 16) & 0xff]
- | ip_maskr[2][(l_in >> 8) & 0xff]
- | ip_maskr[3][l_in & 0xff]
- | ip_maskr[4][r_in >> 24]
- | ip_maskr[5][(r_in >> 16) & 0xff]
- | ip_maskr[6][(r_in >> 8) & 0xff]
- | ip_maskr[7][r_in & 0xff];
-
- while (count--)
- {
- /*
- * Do each round.
- */
- kl = kl1;
- kr = kr1;
- round = 16;
- while (round--)
- {
- /*
- * Expand R to 48 bits (simulate the E-box).
- */
- r48l = ((r & 0x00000001) << 23)
- | ((r & 0xf8000000) >> 9)
- | ((r & 0x1f800000) >> 11)
- | ((r & 0x01f80000) >> 13)
- | ((r & 0x001f8000) >> 15);
-
- r48r = ((r & 0x0001f800) << 7)
- | ((r & 0x00001f80) << 5)
- | ((r & 0x000001f8) << 3)
- | ((r & 0x0000001f) << 1)
- | ((r & 0x80000000) >> 31);
-
- /*
- * Do salting for crypt() and friends, and XOR with the permuted
- * key.
- */
- f = (r48l ^ r48r) & saltbits;
- r48l ^= f ^ *kl++;
- r48r ^= f ^ *kr++;
-
- /*
- * Do sbox lookups (which shrink it back to 32 bits) and do the
- * pbox permutation at the same time.
- */
- f = psbox[0][m_sbox[0][r48l >> 12]]
- | psbox[1][m_sbox[1][r48l & 0xfff]]
- | psbox[2][m_sbox[2][r48r >> 12]]
- | psbox[3][m_sbox[3][r48r & 0xfff]];
-
- /*
- * Now that we've permuted things, complete f().
- */
- f ^= l;
- l = r;
- r = f;
- }
- r = l;
- l = f;
- }
-
- /*
- * Do final permutation (inverse of IP).
- */
- *l_out = fp_maskl[0][l >> 24]
- | fp_maskl[1][(l >> 16) & 0xff]
- | fp_maskl[2][(l >> 8) & 0xff]
- | fp_maskl[3][l & 0xff]
- | fp_maskl[4][r >> 24]
- | fp_maskl[5][(r >> 16) & 0xff]
- | fp_maskl[6][(r >> 8) & 0xff]
- | fp_maskl[7][r & 0xff];
- *r_out = fp_maskr[0][l >> 24]
- | fp_maskr[1][(l >> 16) & 0xff]
- | fp_maskr[2][(l >> 8) & 0xff]
- | fp_maskr[3][l & 0xff]
- | fp_maskr[4][r >> 24]
- | fp_maskr[5][(r >> 16) & 0xff]
- | fp_maskr[6][(r >> 8) & 0xff]
- | fp_maskr[7][r & 0xff];
- return (0);
-}
-
-static int
-des_cipher(const char *in, char *out, long salt, int count)
-{
- uint32 buffer[2];
- uint32 l_out,
- r_out,
- rawl,
- rawr;
- int retval;
-
- if (!des_initialised)
- des_init();
-
- setup_salt(salt);
-
- /* copy data to avoid assuming input is word-aligned */
- memcpy(buffer, in, sizeof(buffer));
-
- rawl = ntohl(buffer[0]);
- rawr = ntohl(buffer[1]);
-
- retval = do_des(rawl, rawr, &l_out, &r_out, count);
-
- buffer[0] = htonl(l_out);
- buffer[1] = htonl(r_out);
-
- /* copy data to avoid assuming output is word-aligned */
- memcpy(out, buffer, sizeof(buffer));
-
- return (retval);
-}
-
-char *
-px_crypt_des(const char *key, const char *setting)
-{
- int i;
- uint32 count,
- salt,
- l,
- r0,
- r1,
- keybuf[2];
- char *p;
- uint8 *q;
- static char output[21];
-
- if (!des_initialised)
- des_init();
-
-
- /*
- * Copy the key, shifting each character up by one bit and padding with
- * zeros.
- */
- q = (uint8 *) keybuf;
- while (q - (uint8 *) keybuf - 8)
- {
- *q++ = *key << 1;
- if (*key != '\0')
- key++;
- }
- if (des_setkey((char *) keybuf))
- return (NULL);
-
-#ifndef DISABLE_XDES
- if (*setting == _PASSWORD_EFMT1)
- {
- /*
- * "new"-style: setting - underscore, 4 bytes of count, 4 bytes of
- * salt key - unlimited characters
- */
- for (i = 1, count = 0L; i < 5; i++)
- count |= ascii_to_bin(setting[i]) << (i - 1) * 6;
-
- for (i = 5, salt = 0L; i < 9; i++)
- salt |= ascii_to_bin(setting[i]) << (i - 5) * 6;
-
- while (*key)
- {
- /*
- * Encrypt the key with itself.
- */
- if (des_cipher((char *) keybuf, (char *) keybuf, 0L, 1))
- return (NULL);
-
- /*
- * And XOR with the next 8 characters of the key.
- */
- q = (uint8 *) keybuf;
- while (q - (uint8 *) keybuf - 8 && *key)
- *q++ ^= *key++ << 1;
-
- if (des_setkey((char *) keybuf))
- return (NULL);
- }
- strncpy(output, setting, 9);
-
- /*
- * Double check that we weren't given a short setting. If we were, the
- * above code will probably have created wierd values for count and
- * salt, but we don't really care. Just make sure the output string
- * doesn't have an extra NUL in it.
- */
- output[9] = '\0';
- p = output + strlen(output);
- }
- else
-#endif /* !DISABLE_XDES */
- {
- /*
- * "old"-style: setting - 2 bytes of salt key - up to 8 characters
- */
- count = 25;
-
- salt = (ascii_to_bin(setting[1]) << 6)
- | ascii_to_bin(setting[0]);
-
- output[0] = setting[0];
-
- /*
- * If the encrypted password that the salt was extracted from is only
- * 1 character long, the salt will be corrupted. We need to ensure
- * that the output string doesn't have an extra NUL in it!
- */
- output[1] = setting[1] ? setting[1] : output[0];
-
- p = output + 2;
- }
- setup_salt(salt);
-
- /*
- * Do it.
- */
- if (do_des(0L, 0L, &r0, &r1, count))
- return (NULL);
-
- /*
- * Now encode the result...
- */
- l = (r0 >> 8);
- *p++ = _crypt_a64[(l >> 18) & 0x3f];
- *p++ = _crypt_a64[(l >> 12) & 0x3f];
- *p++ = _crypt_a64[(l >> 6) & 0x3f];
- *p++ = _crypt_a64[l & 0x3f];
-
- l = (r0 << 16) | ((r1 >> 16) & 0xffff);
- *p++ = _crypt_a64[(l >> 18) & 0x3f];
- *p++ = _crypt_a64[(l >> 12) & 0x3f];
- *p++ = _crypt_a64[(l >> 6) & 0x3f];
- *p++ = _crypt_a64[l & 0x3f];
-
- l = r1 << 2;
- *p++ = _crypt_a64[(l >> 12) & 0x3f];
- *p++ = _crypt_a64[(l >> 6) & 0x3f];
- *p++ = _crypt_a64[l & 0x3f];
- *p = 0;
-
- return (output);
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/crypt-gensalt.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/crypt-gensalt.c b/contrib/pgcrypto/crypt-gensalt.c
deleted file mode 100644
index b2ec3da..0000000
--- a/contrib/pgcrypto/crypt-gensalt.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Written by Solar Designer and placed in the public domain.
- * See crypt_blowfish.c for more information.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/crypt-gensalt.c,v 1.11 2009/06/11 14:48:52 momjian Exp $
- *
- * This file contains salt generation functions for the traditional and
- * other common crypt(3) algorithms, except for bcrypt which is defined
- * entirely in crypt_blowfish.c.
- *
- * Put bcrypt generator also here as crypt-blowfish.c
- * may not be compiled always. -- marko
- */
-
-#include "postgres.h"
-
-#include "px.h"
-#include "px-crypt.h"
-
-typedef unsigned int BF_word;
-
-static unsigned char _crypt_itoa64[64 + 1] =
-"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-
-char *
-_crypt_gensalt_traditional_rn(unsigned long count,
- const char *input, int size, char *output, int output_size)
-{
- if (size < 2 || output_size < 2 + 1 || (count && count != 25))
- {
- if (output_size > 0)
- output[0] = '\0';
- return NULL;
- }
-
- output[0] = _crypt_itoa64[(unsigned int) input[0] & 0x3f];
- output[1] = _crypt_itoa64[(unsigned int) input[1] & 0x3f];
- output[2] = '\0';
-
- return output;
-}
-
-char *
-_crypt_gensalt_extended_rn(unsigned long count,
- const char *input, int size, char *output, int output_size)
-{
- unsigned long value;
-
-/* Even iteration counts make it easier to detect weak DES keys from a look
- * at the hash, so they should be avoided */
- if (size < 3 || output_size < 1 + 4 + 4 + 1 ||
- (count && (count > 0xffffff || !(count & 1))))
- {
- if (output_size > 0)
- output[0] = '\0';
- return NULL;
- }
-
- if (!count)
- count = 725;
-
- output[0] = '_';
- output[1] = _crypt_itoa64[count & 0x3f];
- output[2] = _crypt_itoa64[(count >> 6) & 0x3f];
- output[3] = _crypt_itoa64[(count >> 12) & 0x3f];
- output[4] = _crypt_itoa64[(count >> 18) & 0x3f];
- value = (unsigned long) (unsigned char) input[0] |
- ((unsigned long) (unsigned char) input[1] << 8) |
- ((unsigned long) (unsigned char) input[2] << 16);
- output[5] = _crypt_itoa64[value & 0x3f];
- output[6] = _crypt_itoa64[(value >> 6) & 0x3f];
- output[7] = _crypt_itoa64[(value >> 12) & 0x3f];
- output[8] = _crypt_itoa64[(value >> 18) & 0x3f];
- output[9] = '\0';
-
- return output;
-}
-
-char *
-_crypt_gensalt_md5_rn(unsigned long count,
- const char *input, int size, char *output, int output_size)
-{
- unsigned long value;
-
- if (size < 3 || output_size < 3 + 4 + 1 || (count && count != 1000))
- {
- if (output_size > 0)
- output[0] = '\0';
- return NULL;
- }
-
- output[0] = '$';
- output[1] = '1';
- output[2] = '$';
- value = (unsigned long) (unsigned char) input[0] |
- ((unsigned long) (unsigned char) input[1] << 8) |
- ((unsigned long) (unsigned char) input[2] << 16);
- output[3] = _crypt_itoa64[value & 0x3f];
- output[4] = _crypt_itoa64[(value >> 6) & 0x3f];
- output[5] = _crypt_itoa64[(value >> 12) & 0x3f];
- output[6] = _crypt_itoa64[(value >> 18) & 0x3f];
- output[7] = '\0';
-
- if (size >= 6 && output_size >= 3 + 4 + 4 + 1)
- {
- value = (unsigned long) (unsigned char) input[3] |
- ((unsigned long) (unsigned char) input[4] << 8) |
- ((unsigned long) (unsigned char) input[5] << 16);
- output[7] = _crypt_itoa64[value & 0x3f];
- output[8] = _crypt_itoa64[(value >> 6) & 0x3f];
- output[9] = _crypt_itoa64[(value >> 12) & 0x3f];
- output[10] = _crypt_itoa64[(value >> 18) & 0x3f];
- output[11] = '\0';
- }
-
- return output;
-}
-
-
-
-static unsigned char BF_itoa64[64 + 1] =
-"./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
-
-static void
-BF_encode(char *dst, const BF_word *src, int size)
-{
- unsigned char *sptr = (unsigned char *) src;
- unsigned char *end = sptr + size;
- unsigned char *dptr = (unsigned char *) dst;
- unsigned int c1,
- c2;
-
- do
- {
- c1 = *sptr++;
- *dptr++ = BF_itoa64[c1 >> 2];
- c1 = (c1 & 0x03) << 4;
- if (sptr >= end)
- {
- *dptr++ = BF_itoa64[c1];
- break;
- }
-
- c2 = *sptr++;
- c1 |= c2 >> 4;
- *dptr++ = BF_itoa64[c1];
- c1 = (c2 & 0x0f) << 2;
- if (sptr >= end)
- {
- *dptr++ = BF_itoa64[c1];
- break;
- }
-
- c2 = *sptr++;
- c1 |= c2 >> 6;
- *dptr++ = BF_itoa64[c1];
- *dptr++ = BF_itoa64[c2 & 0x3f];
- } while (sptr < end);
-}
-
-char *
-_crypt_gensalt_blowfish_rn(unsigned long count,
- const char *input, int size, char *output, int output_size)
-{
- if (size < 16 || output_size < 7 + 22 + 1 ||
- (count && (count < 4 || count > 31)))
- {
- if (output_size > 0)
- output[0] = '\0';
- return NULL;
- }
-
- if (!count)
- count = 5;
-
- output[0] = '$';
- output[1] = '2';
- output[2] = 'a';
- output[3] = '$';
- output[4] = '0' + count / 10;
- output[5] = '0' + count % 10;
- output[6] = '$';
-
- BF_encode(&output[7], (BF_word *) input, 16);
- output[7 + 22] = '\0';
-
- return output;
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/crypt-md5.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/crypt-md5.c b/contrib/pgcrypto/crypt-md5.c
deleted file mode 100644
index d70fc34..0000000
--- a/contrib/pgcrypto/crypt-md5.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * File imported from FreeBSD, original by Poul-Henning Kamp.
- *
- * $FreeBSD: src/lib/libcrypt/crypt-md5.c,v 1.5 1999/12/17 20:21:45 peter Exp $
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/crypt-md5.c,v 1.9 2009/04/15 18:58:24 mha Exp $
- */
-
-#include "postgres.h"
-
-#include "px.h"
-#include "px-crypt.h"
-
-#define MD5_SIZE 16
-
-static const char _crypt_a64[] =
-"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-
-static void
-_crypt_to64(char *s, unsigned long v, int n)
-{
- while (--n >= 0)
- {
- *s++ = _crypt_a64[v & 0x3f];
- v >>= 6;
- }
-}
-
-/*
- * UNIX password
- */
-
-char *
-px_crypt_md5(const char *pw, const char *salt, char *passwd, unsigned dstlen)
-{
- static char *magic = "$1$"; /* This string is magic for this algorithm.
- * Having it this way, we can get get better
- * later on */
- static char *p;
- static const char *sp,
- *ep;
- unsigned char final[MD5_SIZE];
- int sl,
- pl,
- i;
- PX_MD *ctx,
- *ctx1;
- int err;
- unsigned long l;
-
- if (!passwd || dstlen < 120)
- return NULL;
-
- /* Refine the Salt first */
- sp = salt;
-
- /* If it starts with the magic string, then skip that */
- if (!strncmp(sp, magic, strlen(magic)))
- sp += strlen(magic);
-
- /* It stops at the first '$', max 8 chars */
- for (ep = sp; *ep && *ep != '$' && ep < (sp + 8); ep++)
- continue;
-
- /* get the length of the true salt */
- sl = ep - sp;
-
- /* */
- err = px_find_digest("md5", &ctx);
- if (err)
- return NULL;
- err = px_find_digest("md5", &ctx1);
-
- /* The password first, since that is what is most unknown */
- px_md_update(ctx, (uint8 *) pw, strlen(pw));
-
- /* Then our magic string */
- px_md_update(ctx, (uint8 *) magic, strlen(magic));
-
- /* Then the raw salt */
- px_md_update(ctx, (uint8 *) sp, sl);
-
- /* Then just as many characters of the MD5(pw,salt,pw) */
- px_md_update(ctx1, (uint8 *) pw, strlen(pw));
- px_md_update(ctx1, (uint8 *) sp, sl);
- px_md_update(ctx1, (uint8 *) pw, strlen(pw));
- px_md_finish(ctx1, final);
- for (pl = strlen(pw); pl > 0; pl -= MD5_SIZE)
- px_md_update(ctx, final, pl > MD5_SIZE ? MD5_SIZE : pl);
-
- /* Don't leave anything around in vm they could use. */
- memset(final, 0, sizeof final);
-
- /* Then something really weird... */
- for (i = strlen(pw); i; i >>= 1)
- if (i & 1)
- px_md_update(ctx, final, 1);
- else
- px_md_update(ctx, (uint8 *) pw, 1);
-
- /* Now make the output string */
- strcpy(passwd, magic);
- strncat(passwd, sp, sl);
- strcat(passwd, "$");
-
- px_md_finish(ctx, final);
-
- /*
- * and now, just to make sure things don't run too fast On a 60 Mhz
- * Pentium this takes 34 msec, so you would need 30 seconds to build a
- * 1000 entry dictionary...
- */
- for (i = 0; i < 1000; i++)
- {
- px_md_reset(ctx1);
- if (i & 1)
- px_md_update(ctx1, (uint8 *) pw, strlen(pw));
- else
- px_md_update(ctx1, final, MD5_SIZE);
-
- if (i % 3)
- px_md_update(ctx1, (uint8 *) sp, sl);
-
- if (i % 7)
- px_md_update(ctx1, (uint8 *) pw, strlen(pw));
-
- if (i & 1)
- px_md_update(ctx1, final, MD5_SIZE);
- else
- px_md_update(ctx1, (uint8 *) pw, strlen(pw));
- px_md_finish(ctx1, final);
- }
-
- p = passwd + strlen(passwd);
-
- l = (final[0] << 16) | (final[6] << 8) | final[12];
- _crypt_to64(p, l, 4);
- p += 4;
- l = (final[1] << 16) | (final[7] << 8) | final[13];
- _crypt_to64(p, l, 4);
- p += 4;
- l = (final[2] << 16) | (final[8] << 8) | final[14];
- _crypt_to64(p, l, 4);
- p += 4;
- l = (final[3] << 16) | (final[9] << 8) | final[15];
- _crypt_to64(p, l, 4);
- p += 4;
- l = (final[4] << 16) | (final[10] << 8) | final[5];
- _crypt_to64(p, l, 4);
- p += 4;
- l = final[11];
- _crypt_to64(p, l, 2);
- p += 2;
- *p = '\0';
-
- /* Don't leave anything around in vm they could use. */
- memset(final, 0, sizeof final);
-
- px_md_free(ctx1);
- px_md_free(ctx);
-
- return passwd;
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/3des.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/3des.out b/contrib/pgcrypto/expected/3des.out
deleted file mode 100755
index 3e6a88e..0000000
--- a/contrib/pgcrypto/expected/3des.out
+++ /dev/null
@@ -1,69 +0,0 @@
---
--- 3DES cipher
---
--- test vector from somewhere
-SELECT encode(encrypt(
-decode('80 00 00 00 00 00 00 00', 'hex'),
-decode('01 01 01 01 01 01 01 01
- 01 01 01 01 01 01 01 01
- 01 01 01 01 01 01 01 01', 'hex'),
-'3des-ecb/pad:none'), 'hex');
- encode
-------------------
- 95f8a5e5dd31d900
-(1 row)
-
--- val 95 F8 A5 E5 DD 31 D9 00
-select encode( encrypt('', 'foo', '3des'), 'hex');
- encode
-------------------
- 752111e37a2d7ac3
-(1 row)
-
--- 10 bytes key
-select encode( encrypt('foo', '0123456789', '3des'), 'hex');
- encode
-------------------
- d2fb8baa1717cb02
-(1 row)
-
--- 22 bytes key
-select encode( encrypt('foo', '0123456789012345678901', '3des'), 'hex');
- encode
-------------------
- a44360e699269817
-(1 row)
-
--- decrypt
-select decrypt(encrypt('foo', '0123456', '3des'), '0123456', '3des');
- decrypt
----------
- foo
-(1 row)
-
--- iv
-select encode(encrypt_iv('foo', '0123456', 'abcd', '3des'), 'hex');
- encode
-------------------
- 50735067b073bb93
-(1 row)
-
-select decrypt_iv(decode('50735067b073bb93', 'hex'), '0123456', 'abcd', '3des');
- decrypt_iv
-------------
- foo
-(1 row)
-
--- long message
-select encode(encrypt('Lets try a longer message.', '0123456789012345678901', '3des'), 'hex');
- encode
-------------------------------------------------------------------
- b71e3422269d0ded19468f33d65cd663c28e0871984792a7b3ba0ddcecec8d2c
-(1 row)
-
-select decrypt(encrypt('Lets try a longer message.', '0123456789012345678901', '3des'), '0123456789012345678901', '3des');
- decrypt
-----------------------------
- Lets try a longer message.
-(1 row)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/blowfish.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/blowfish.out b/contrib/pgcrypto/expected/blowfish.out
deleted file mode 100755
index 5c09cf5..0000000
--- a/contrib/pgcrypto/expected/blowfish.out
+++ /dev/null
@@ -1,173 +0,0 @@
---
--- Blowfish cipher
---
--- some standard Blowfish testvalues
-SELECT encode(encrypt(
-decode('0000000000000000', 'hex'),
-decode('0000000000000000', 'hex'),
-'bf-ecb/pad:none'), 'hex');
- encode
-------------------
- 4ef997456198dd78
-(1 row)
-
-SELECT encode(encrypt(
-decode('ffffffffffffffff', 'hex'),
-decode('ffffffffffffffff', 'hex'),
-'bf-ecb/pad:none'), 'hex');
- encode
-------------------
- 51866fd5b85ecb8a
-(1 row)
-
-SELECT encode(encrypt(
-decode('1000000000000001', 'hex'),
-decode('3000000000000000', 'hex'),
-'bf-ecb/pad:none'), 'hex');
- encode
-------------------
- 7d856f9a613063f2
-(1 row)
-
-SELECT encode(encrypt(
-decode('1111111111111111', 'hex'),
-decode('1111111111111111', 'hex'),
-'bf-ecb/pad:none'), 'hex');
- encode
-------------------
- 2466dd878b963c9d
-(1 row)
-
-SELECT encode(encrypt(
-decode('0123456789abcdef', 'hex'),
-decode('fedcba9876543210', 'hex'),
-'bf-ecb/pad:none'), 'hex');
- encode
-------------------
- 0aceab0fc6a0a28d
-(1 row)
-
-SELECT encode(encrypt(
-decode('01a1d6d039776742', 'hex'),
-decode('fedcba9876543210', 'hex'),
-'bf-ecb/pad:none'), 'hex');
- encode
-------------------
- 3273b8badc9e9e15
-(1 row)
-
-SELECT encode(encrypt(
-decode('ffffffffffffffff', 'hex'),
-decode('0000000000000000', 'hex'),
-'bf-ecb/pad:none'), 'hex');
- encode
-------------------
- 014933e0cdaff6e4
-(1 row)
-
--- setkey
-SELECT encode(encrypt(
-decode('fedcba9876543210', 'hex'),
-decode('f0e1d2c3b4a5968778695a4b3c2d1e0f', 'hex'),
-'bf-ecb/pad:none'), 'hex');
- encode
-------------------
- 93142887ee3be15c
-(1 row)
-
--- with padding
-SELECT encode(encrypt(
-decode('01234567890123456789', 'hex'),
-decode('33443344334433443344334433443344', 'hex'),
-'bf-ecb'), 'hex');
- encode
-----------------------------------
- 0d04a43a20456dee5ede6ed9e4dcaaa6
-(1 row)
-
--- cbc
--- 28 bytes key
-SELECT encode(encrypt(
-decode('6b77b4d63006dee605b156e27403979358deb9e7154616d959f1652bd5', 'hex'),
-decode('37363534333231204e6f77206973207468652074696d6520666f7220', 'hex'),
-'bf-cbc'), 'hex');
- encode
-------------------------------------------------------------------
- 4f2beb748c4f689ec755edb9dc252a41b93a3786850b4c75d6a702b6a8e48825
-(1 row)
-
--- 29 bytes key
-SELECT encode(encrypt(
-decode('6b77b4d63006dee605b156e27403979358deb9e7154616d959f1652bd5ff92cc', 'hex'),
-decode('37363534333231204e6f77206973207468652074696d6520666f722000', 'hex'),
-'bf-cbc'), 'hex');
- encode
-----------------------------------------------------------------------------------
- 3ea6357a0ee7fad6d0c4b63464f2aafa40c2e91b4b7e1bba8114932fd92b5c8f111e7e50e7b2e541
-(1 row)
-
--- blowfish-448
-SELECT encode(encrypt(
-decode('fedcba9876543210', 'hex'),
-decode('f0e1d2c3b4a5968778695a4b3c2d1e0f001122334455667704689104c2fd3b2f584023641aba61761f1f1f1f0e0e0e0effffffffffffffff', 'hex'),
-'bf-ecb/pad:none'), 'hex');
- encode
-------------------
- c04504012e4e1f53
-(1 row)
-
--- result: c04504012e4e1f53
--- empty data
-select encode( encrypt('', 'foo', 'bf'), 'hex');
- encode
-------------------
- 1871949bb2311c8e
-(1 row)
-
--- 10 bytes key
-select encode( encrypt('foo', '0123456789', 'bf'), 'hex');
- encode
-------------------
- 42f58af3b2c03f46
-(1 row)
-
--- 22 bytes key
-select encode( encrypt('foo', '0123456789012345678901', 'bf'), 'hex');
- encode
-------------------
- 86ab6f0bc72b5f22
-(1 row)
-
--- decrypt
-select decrypt(encrypt('foo', '0123456', 'bf'), '0123456', 'bf');
- decrypt
----------
- foo
-(1 row)
-
--- iv
-select encode(encrypt_iv('foo', '0123456', 'abcd', 'bf'), 'hex');
- encode
-------------------
- 95c7e89322525d59
-(1 row)
-
-select decrypt_iv(decode('95c7e89322525d59', 'hex'), '0123456', 'abcd', 'bf');
- decrypt_iv
-------------
- foo
-(1 row)
-
--- long message
-select encode(encrypt('Lets try a longer message.', '0123456789', 'bf'), 'hex');
- encode
-------------------------------------------------------------------
- a76059f7a1b627b5b84080d9beb337714c7a7f8b70300023e5feb6dfa6813536
-(1 row)
-
-select decrypt(encrypt('Lets try a longer message.', '0123456789', 'bf'), '0123456789', 'bf');
- decrypt
-----------------------------
- Lets try a longer message.
-(1 row)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/cast5.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/cast5.out b/contrib/pgcrypto/expected/cast5.out
deleted file mode 100755
index 4ca824e..0000000
--- a/contrib/pgcrypto/expected/cast5.out
+++ /dev/null
@@ -1,86 +0,0 @@
---
--- Cast5 cipher
---
--- test vectors from RFC2144
--- 128 bit key
-SELECT encode(encrypt(
-decode('01 23 45 67 89 AB CD EF', 'hex'),
-decode('01 23 45 67 12 34 56 78 23 45 67 89 34 56 78 9A', 'hex'),
-'cast5-ecb/pad:none'), 'hex');
- encode
-------------------
- 238b4fe5847e44b2
-(1 row)
-
--- result: 23 8B 4F E5 84 7E 44 B2
--- 80 bit key
-SELECT encode(encrypt(
-decode('01 23 45 67 89 AB CD EF', 'hex'),
-decode('01 23 45 67 12 34 56 78 23 45', 'hex'),
-'cast5-ecb/pad:none'), 'hex');
- encode
-------------------
- eb6a711a2c02271b
-(1 row)
-
--- result: EB 6A 71 1A 2C 02 27 1B
--- 40 bit key
-SELECT encode(encrypt(
-decode('01 23 45 67 89 AB CD EF', 'hex'),
-decode('01 23 45 67 12', 'hex'),
-'cast5-ecb/pad:none'), 'hex');
- encode
-------------------
- 7ac816d16e9b302e
-(1 row)
-
--- result: 7A C8 16 D1 6E 9B 30 2E
--- cbc
--- empty data
-select encode( encrypt('', 'foo', 'cast5'), 'hex');
- encode
-------------------
- a48bd1aabde4de10
-(1 row)
-
--- 10 bytes key
-select encode( encrypt('foo', '0123456789', 'cast5'), 'hex');
- encode
-------------------
- b07f19255e60cb6d
-(1 row)
-
--- decrypt
-select decrypt(encrypt('foo', '0123456', 'cast5'), '0123456', 'cast5');
- decrypt
----------
- foo
-(1 row)
-
--- iv
-select encode(encrypt_iv('foo', '0123456', 'abcd', 'cast5'), 'hex');
- encode
-------------------
- 384a970695ce016a
-(1 row)
-
-select decrypt_iv(decode('384a970695ce016a', 'hex'),
- '0123456', 'abcd', 'cast5');
- decrypt_iv
-------------
- foo
-(1 row)
-
--- long message
-select encode(encrypt('Lets try a longer message.', '0123456789', 'cast5'), 'hex');
- encode
-------------------------------------------------------------------
- 04fcffc91533e1505dadcb10766d9fed0937818e663e402384e049942ba60fff
-(1 row)
-
-select decrypt(encrypt('Lets try a longer message.', '0123456789', 'cast5'), '0123456789', 'cast5');
- decrypt
-----------------------------
- Lets try a longer message.
-(1 row)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/crypt-blowfish.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/crypt-blowfish.out b/contrib/pgcrypto/expected/crypt-blowfish.out
deleted file mode 100755
index 329d78f..0000000
--- a/contrib/pgcrypto/expected/crypt-blowfish.out
+++ /dev/null
@@ -1,27 +0,0 @@
---
--- crypt() and gen_salt(): bcrypt
---
-SELECT crypt('', '$2a$06$RQiOJ.3ELirrXwxIZY8q0O');
- crypt
---------------------------------------------------------------
- $2a$06$RQiOJ.3ELirrXwxIZY8q0OlGbBEpDmx7IRZlNYvGJ1SHXwNi2cEKK
-(1 row)
-
-SELECT crypt('foox', '$2a$06$RQiOJ.3ELirrXwxIZY8q0O');
- crypt
---------------------------------------------------------------
- $2a$06$RQiOJ.3ELirrXwxIZY8q0OR3CVJrAfda1z26CCHPnB6mmVZD8p0/C
-(1 row)
-
-CREATE TABLE ctest (data text, res text, salt text);
-INSERT INTO ctest VALUES ('password', '', '');
-UPDATE ctest SET salt = gen_salt('bf', 8);
-UPDATE ctest SET res = crypt(data, salt);
-SELECT res = crypt(data, res) AS "worked"
-FROM ctest;
- worked
---------
- t
-(1 row)
-
-DROP TABLE ctest;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/crypt-des.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/crypt-des.out b/contrib/pgcrypto/expected/crypt-des.out
deleted file mode 100755
index b8b6050..0000000
--- a/contrib/pgcrypto/expected/crypt-des.out
+++ /dev/null
@@ -1,27 +0,0 @@
---
--- crypt() and gen_salt(): crypt-des
---
-SELECT crypt('', 'NB');
- crypt
----------------
- NBPx/38Y48kHg
-(1 row)
-
-SELECT crypt('foox', 'NB');
- crypt
----------------
- NB53EGGqrrb5E
-(1 row)
-
-CREATE TABLE ctest (data text, res text, salt text);
-INSERT INTO ctest VALUES ('password', '', '');
-UPDATE ctest SET salt = gen_salt('des');
-UPDATE ctest SET res = crypt(data, salt);
-SELECT res = crypt(data, res) AS "worked"
-FROM ctest;
- worked
---------
- t
-(1 row)
-
-DROP TABLE ctest;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/crypt-md5.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/crypt-md5.out b/contrib/pgcrypto/expected/crypt-md5.out
deleted file mode 100755
index a1c8304..0000000
--- a/contrib/pgcrypto/expected/crypt-md5.out
+++ /dev/null
@@ -1,27 +0,0 @@
---
--- crypt() and gen_salt(): md5
---
-SELECT crypt('', '$1$Szzz0yzz');
- crypt
-------------------------------------
- $1$Szzz0yzz$To38XrR3BsbXQW2ZpfKjF1
-(1 row)
-
-SELECT crypt('foox', '$1$Szzz0yzz');
- crypt
-------------------------------------
- $1$Szzz0yzz$IYL49cd3t9bllsA7Jmz1M1
-(1 row)
-
-CREATE TABLE ctest (data text, res text, salt text);
-INSERT INTO ctest VALUES ('password', '', '');
-UPDATE ctest SET salt = gen_salt('md5');
-UPDATE ctest SET res = crypt(data, salt);
-SELECT res = crypt(data, res) AS "worked"
-FROM ctest;
- worked
---------
- t
-(1 row)
-
-DROP TABLE ctest;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/crypt-xdes.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/crypt-xdes.out b/contrib/pgcrypto/expected/crypt-xdes.out
deleted file mode 100755
index cdcdefb..0000000
--- a/contrib/pgcrypto/expected/crypt-xdes.out
+++ /dev/null
@@ -1,27 +0,0 @@
---
--- crypt() and gen_salt(): extended des
---
-SELECT crypt('', '_J9..j2zz');
- crypt
-----------------------
- _J9..j2zzR/nIRDK3pPc
-(1 row)
-
-SELECT crypt('foox', '_J9..j2zz');
- crypt
-----------------------
- _J9..j2zzAYKMvO2BYRY
-(1 row)
-
-CREATE TABLE ctest (data text, res text, salt text);
-INSERT INTO ctest VALUES ('password', '', '');
-UPDATE ctest SET salt = gen_salt('xdes', 1001);
-UPDATE ctest SET res = crypt(data, salt);
-SELECT res = crypt(data, res) AS "worked"
-FROM ctest;
- worked
---------
- t
-(1 row)
-
-DROP TABLE ctest;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/des.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/des.out b/contrib/pgcrypto/expected/des.out
deleted file mode 100755
index 00513c4..0000000
--- a/contrib/pgcrypto/expected/des.out
+++ /dev/null
@@ -1,61 +0,0 @@
---
--- DES cipher
---
--- no official test vectors atm
--- from blowfish.sql
-SELECT encode(encrypt(
-decode('0123456789abcdef', 'hex'),
-decode('fedcba9876543210', 'hex'),
-'des-ecb/pad:none'), 'hex');
- encode
-------------------
- ed39d950fa74bcc4
-(1 row)
-
--- empty data
-select encode( encrypt('', 'foo', 'des'), 'hex');
- encode
-------------------
- 752111e37a2d7ac3
-(1 row)
-
--- 8 bytes key
-select encode( encrypt('foo', '01234589', 'des'), 'hex');
- encode
-------------------
- dec0f9c602b647a8
-(1 row)
-
--- decrypt
-select decrypt(encrypt('foo', '0123456', 'des'), '0123456', 'des');
- decrypt
----------
- foo
-(1 row)
-
--- iv
-select encode(encrypt_iv('foo', '0123456', 'abcd', 'des'), 'hex');
- encode
-------------------
- 50735067b073bb93
-(1 row)
-
-select decrypt_iv(decode('50735067b073bb93', 'hex'), '0123456', 'abcd', 'des');
- decrypt_iv
-------------
- foo
-(1 row)
-
--- long message
-select encode(encrypt('Lets try a longer message.', '01234567', 'des'), 'hex');
- encode
-------------------------------------------------------------------
- 5ad146043e5f30967e06a0fcbae602daf4ff2a5fd0ed12d6c5913cf85f1e36ca
-(1 row)
-
-select decrypt(encrypt('Lets try a longer message.', '01234567', 'des'), '01234567', 'des');
- decrypt
-----------------------------
- Lets try a longer message.
-(1 row)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/hmac-md5.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/hmac-md5.out b/contrib/pgcrypto/expected/hmac-md5.out
deleted file mode 100755
index 9eded3b..0000000
--- a/contrib/pgcrypto/expected/hmac-md5.out
+++ /dev/null
@@ -1,72 +0,0 @@
---
--- HMAC-MD5
---
-SELECT encode(hmac(
-'Hi There',
-decode('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b', 'hex'),
-'md5'), 'hex');
- encode
-----------------------------------
- 9294727a3638bb1c13f48ef8158bfc9d
-(1 row)
-
--- 2
-SELECT encode(hmac(
-'Jefe',
-'what do ya want for nothing?',
-'md5'), 'hex');
- encode
-----------------------------------
- 813aead7c4a34bff01a16d61368e7c13
-(1 row)
-
--- 3
-SELECT encode(hmac(
-decode('dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd', 'hex'),
-decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'),
-'md5'), 'hex');
- encode
-----------------------------------
- 56be34521d144c88dbb8c733f0e8b3f6
-(1 row)
-
--- 4
-SELECT encode(hmac(
-decode('cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd', 'hex'),
-decode('0102030405060708090a0b0c0d0e0f10111213141516171819', 'hex'),
-'md5'), 'hex');
- encode
-----------------------------------
- 697eaf0aca3a3aea3a75164746ffaa79
-(1 row)
-
--- 5
-SELECT encode(hmac(
-'Test With Truncation',
-decode('0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c', 'hex'),
-'md5'), 'hex');
- encode
-----------------------------------
- 56461ef2342edc00f9bab995690efd4c
-(1 row)
-
--- 6
-SELECT encode(hmac(
-'Test Using Larger Than Block-Size Key - Hash Key First',
-decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'),
-'md5'), 'hex');
- encode
-----------------------------------
- 6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd
-(1 row)
-
--- 7
-SELECT encode(hmac(
-'Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data',
-decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'),
-'md5'), 'hex');
- encode
-----------------------------------
- 6f630fad67cda0ee1fb1f562db3aa53e
-(1 row)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/hmac-sha1.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/hmac-sha1.out b/contrib/pgcrypto/expected/hmac-sha1.out
deleted file mode 100755
index d5f1cf2..0000000
--- a/contrib/pgcrypto/expected/hmac-sha1.out
+++ /dev/null
@@ -1,72 +0,0 @@
---
--- HMAC-MD5
---
-SELECT encode(hmac(
-'Hi There',
-decode('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b', 'hex'),
-'sha1'), 'hex');
- encode
-------------------------------------------
- 675b0b3a1b4ddf4e124872da6c2f632bfed957e9
-(1 row)
-
--- 2
-SELECT encode(hmac(
-'Jefe',
-'what do ya want for nothing?',
-'sha1'), 'hex');
- encode
-------------------------------------------
- 156d4c35468a0339f3fa57a067bf47f814eb7a57
-(1 row)
-
--- 3
-SELECT encode(hmac(
-decode('dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd', 'hex'),
-decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'),
-'sha1'), 'hex');
- encode
-------------------------------------------
- d730594d167e35d5956fd8003d0db3d3f46dc7bb
-(1 row)
-
--- 4
-SELECT encode(hmac(
-decode('cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd', 'hex'),
-decode('0102030405060708090a0b0c0d0e0f10111213141516171819', 'hex'),
-'sha1'), 'hex');
- encode
-------------------------------------------
- 4c9007f4026250c6bc8414f9bf50c86c2d7235da
-(1 row)
-
--- 5
-SELECT encode(hmac(
-'Test With Truncation',
-decode('0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c', 'hex'),
-'sha1'), 'hex');
- encode
-------------------------------------------
- 37268b7e21e84da5720c53c4ba03ad1104039fa7
-(1 row)
-
--- 6
-SELECT encode(hmac(
-'Test Using Larger Than Block-Size Key - Hash Key First',
-decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'),
-'sha1'), 'hex');
- encode
-------------------------------------------
- aa4ae5e15272d00e95705637ce8a3b55ed402112
-(1 row)
-
--- 7
-SELECT encode(hmac(
-'Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data',
-decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'),
-'sha1'), 'hex');
- encode
-------------------------------------------
- e8e99d0f45237d786d6bbaa7965c7808bbff1a91
-(1 row)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/init.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/init.out b/contrib/pgcrypto/expected/init.out
deleted file mode 100755
index 649f9e8..0000000
--- a/contrib/pgcrypto/expected/init.out
+++ /dev/null
@@ -1,26 +0,0 @@
---
--- init pgcrypto
---
-\set ECHO none
--- check for encoding fn's
-SELECT encode('foo', 'hex');
- encode
---------
- 666f6f
-(1 row)
-
-SELECT pg_catalog.decode('666f6f', 'hex');
- decode
---------
- foo
-(1 row)
-
--- check error handling
-select gen_salt('foo');
-ERROR: gen_salt: Unknown salt algorithm
-select digest('foo', 'foo');
-ERROR: Cannot use "foo": No such hash algorithm
-select hmac('foo', 'foo', 'foo');
-ERROR: Cannot use "foo": No such hash algorithm
-select encrypt('foo', 'foo', 'foo');
-ERROR: Cannot use "foo": No such cipher algorithm
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/md5.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/md5.out b/contrib/pgcrypto/expected/md5.out
deleted file mode 100755
index e3301af..0000000
--- a/contrib/pgcrypto/expected/md5.out
+++ /dev/null
@@ -1,45 +0,0 @@
---
--- MD5 message digest
---
-SELECT encode(digest('', 'md5'), 'hex');
- encode
-----------------------------------
- d41d8cd98f00b204e9800998ecf8427e
-(1 row)
-
-SELECT encode(digest('a', 'md5'), 'hex');
- encode
-----------------------------------
- 0cc175b9c0f1b6a831c399e269772661
-(1 row)
-
-SELECT encode(digest('abc', 'md5'), 'hex');
- encode
-----------------------------------
- 900150983cd24fb0d6963f7d28e17f72
-(1 row)
-
-SELECT encode(digest('message digest', 'md5'), 'hex');
- encode
-----------------------------------
- f96b697d7cb7938d525a2f31aaf161d0
-(1 row)
-
-SELECT encode(digest('abcdefghijklmnopqrstuvwxyz', 'md5'), 'hex');
- encode
-----------------------------------
- c3fcd3d76192e4007dfb496cca67e13b
-(1 row)
-
-SELECT encode(digest('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'md5'), 'hex');
- encode
-----------------------------------
- d174ab98d277d9f5a5611c2c9f419d9f
-(1 row)
-
-SELECT encode(digest('12345678901234567890123456789012345678901234567890123456789012345678901234567890', 'md5'), 'hex');
- encode
-----------------------------------
- 57edf4a22be3c955ac49da2e2107b67a
-(1 row)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/pgp-armor.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/pgp-armor.out b/contrib/pgcrypto/expected/pgp-armor.out
deleted file mode 100755
index 60a89e5..0000000
--- a/contrib/pgcrypto/expected/pgp-armor.out
+++ /dev/null
@@ -1,102 +0,0 @@
---
--- PGP Armor
---
-select armor('');
- armor
----------------------------------------------------------------
- -----BEGIN PGP MESSAGE-----
-
-=twTO
------END PGP MESSAGE-----
-
-(1 row)
-
-select armor('test');
- armor
-------------------------------------------------------------------------
- -----BEGIN PGP MESSAGE-----
-
-dGVzdA==
-=+G7Q
------END PGP MESSAGE-----
-
-(1 row)
-
-select dearmor(armor(''));
- dearmor
----------
-
-(1 row)
-
-select dearmor(armor('zooka'));
- dearmor
----------
- zooka
-(1 row)
-
-select armor('0123456789abcdef0123456789abcdef0123456789abcdef
-0123456789abcdef0123456789abcdef0123456789abcdef');
- armor
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- -----BEGIN PGP MESSAGE-----
-
-MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmCjAxMjM0NTY3
-ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZg==
-=JFw5
------END PGP MESSAGE-----
-
-(1 row)
-
--- lots formatting
-select dearmor(' a pgp msg:
-
------BEGIN PGP MESSAGE-----
-Comment: Some junk
-
-em9va2E=
-
- =D5cR
-
------END PGP MESSAGE-----');
- dearmor
----------
- zooka
-(1 row)
-
--- lots messages
-select dearmor('
-wrong packet:
- -----BEGIN PGP MESSAGE-----
-
- d3Jvbmc=
- =vCYP
- -----END PGP MESSAGE-----
-
-right packet:
------BEGIN PGP MESSAGE-----
-
-cmlnaHQ=
-=nbpj
------END PGP MESSAGE-----
-
-use only first packet
------BEGIN PGP MESSAGE-----
-
-d3Jvbmc=
-=vCYP
------END PGP MESSAGE-----
-');
- dearmor
----------
- right
-(1 row)
-
--- bad crc
-select dearmor('
------BEGIN PGP MESSAGE-----
-
-em9va2E=
-=ZZZZ
------END PGP MESSAGE-----
-');
-ERROR: Corrupt ascii-armor
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/pgp-compression.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/pgp-compression.out b/contrib/pgcrypto/expected/pgp-compression.out
deleted file mode 100755
index 32b350b..0000000
--- a/contrib/pgcrypto/expected/pgp-compression.out
+++ /dev/null
@@ -1,50 +0,0 @@
---
--- PGP compression support
---
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-
-ww0ECQMCsci6AdHnELlh0kQB4jFcVwHMJg0Bulop7m3Mi36s15TAhBo0AnzIrRFrdLVCkKohsS6+
-DMcmR53SXfLoDJOv/M8uKj3QSq7oWNIp95pxfA==
-=tbSn
------END PGP MESSAGE-----
-'), 'key', 'expect-compress-algo=1');
- pgp_sym_decrypt
------------------
- Secret message
-(1 row)
-
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret message', 'key', 'compress-algo=0'),
- 'key', 'expect-compress-algo=0');
- pgp_sym_decrypt
------------------
- Secret message
-(1 row)
-
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret message', 'key', 'compress-algo=1'),
- 'key', 'expect-compress-algo=1');
- pgp_sym_decrypt
------------------
- Secret message
-(1 row)
-
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret message', 'key', 'compress-algo=2'),
- 'key', 'expect-compress-algo=2');
- pgp_sym_decrypt
------------------
- Secret message
-(1 row)
-
--- level=0 should turn compression off
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret message', 'key',
- 'compress-algo=2, compress-level=0'),
- 'key', 'expect-compress-algo=0');
- pgp_sym_decrypt
------------------
- Secret message
-(1 row)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/pgp-decrypt.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/pgp-decrypt.out b/contrib/pgcrypto/expected/pgp-decrypt.out
deleted file mode 100755
index 8ecb56f..0000000
--- a/contrib/pgcrypto/expected/pgp-decrypt.out
+++ /dev/null
@@ -1,366 +0,0 @@
---
--- pgp_descrypt tests
---
--- Checking ciphers
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.blowfish.sha1.mdc.s2k3.z0
-
-jA0EBAMCfFNwxnvodX9g0jwB4n4s26/g5VmKzVab1bX1SmwY7gvgvlWdF3jKisvS
-yA6Ce1QTMK3KdL2MPfamsTUSAML8huCJMwYQFfE=
-=JcP+
------END PGP MESSAGE-----
-'), 'foobar');
- pgp_sym_decrypt
------------------
- Secret message.
-(1 row)
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.mdc.s2k3.z0
-
-jA0EBwMCci97v0Q6Z0Zg0kQBsVf5Oe3iC+FBzUmuMV9KxmAyOMyjCc/5i8f1Eest
-UTAsG35A1vYs02VARKzGz6xI2UHwFUirP+brPBg3Ee7muOx8pA==
-=XtrP
------END PGP MESSAGE-----
-'), 'foobar');
- pgp_sym_decrypt
------------------
- Secret message.
-(1 row)
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes192.sha1.mdc.s2k3.z0
-
-jA0ECAMCI7YQpWqp3D1g0kQBCjB7GlX7+SQeXNleXeXQ78ZAPNliquGDq9u378zI
-5FPTqAhIB2/2fjY8QEIs1ai00qphjX2NitxV/3Wn+6dufB4Q4g==
-=rCZt
------END PGP MESSAGE-----
-'), 'foobar');
- pgp_sym_decrypt
------------------
- Secret message.
-(1 row)
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes256.sha1.mdc.s2k3.z0
-
-jA0ECQMC4f/5djqCC1Rg0kQBTHEPsD+Sw7biBsM2er3vKyGPAQkuTBGKC5ie7hT/
-lceMfQdbAg6oTFyJpk/wH18GzRDphCofg0X8uLgkAKMrpcmgog==
-=fB6S
------END PGP MESSAGE-----
-'), 'foobar');
- pgp_sym_decrypt
------------------
- Secret message.
-(1 row)
-
--- Checking MDC modes
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.nomdc.s2k3.z0
-
-jA0EBwMCnv07rlXqWctgyS2Dm2JfOKCRL4sLSLJUC8RS2cH7cIhKSuLitOtyquB+
-u9YkgfJfsuRJmgQ9tmo=
-=60ui
------END PGP MESSAGE-----
-'), 'foobar');
- pgp_sym_decrypt
------------------
- Secret message.
-(1 row)
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.mdc.s2k3.z0
-
-jA0EBwMCEeP3idNjQ1Bg0kQBf4G0wX+2QNzLh2YNwYkQgQkfYhn/hLXjV4nK9nsE
-8Ex1Dsdt5UPvOz8W8VKQRS6loOfOe+yyXil8W3IYFwUpdDUi+Q==
-=moGf
------END PGP MESSAGE-----
-'), 'foobar');
- pgp_sym_decrypt
------------------
- Secret message.
-(1 row)
-
--- Checking hashes
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.md5.mdc.s2k3.z0
-
-jA0EBwMClrXXtOXetohg0kQBn0Kl1ymevQZRHkdoYRHgzCwSQEiss7zYff2UNzgO
-KyRrHf7zEBuZiZ2AG34jNVMOLToj1jJUg5zTSdecUzQVCykWTA==
-=NyLk
------END PGP MESSAGE-----
-'), 'foobar');
- pgp_sym_decrypt
------------------
- Secret message.
-(1 row)
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.mdc.s2k3.z0
-
-jA0EBwMCApbdlrURoWJg0kQBzHM/E0o7djY82bNuspjxjAcPFrrtp0uvDdMQ4z2m
-/PM8jhgI5vxFYfNQjLl8y3fHYIomk9YflN9K/Q13iq8A8sjeTw==
-=FxbQ
------END PGP MESSAGE-----
-'), 'foobar');
- pgp_sym_decrypt
------------------
- Secret message.
-(1 row)
-
--- Checking S2K modes
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.mdc.s2k0.z0
-
-jAQEBwAC0kQBKTaLAKE3xzps+QIZowqRNb2eAdzBw2LxEW2YD5PgNlbhJdGg+dvw
-Ah9GXjGS1TVALzTImJbz1uHUZRfhJlFbc5yGQw==
-=YvkV
------END PGP MESSAGE-----
-'), 'foobar');
- pgp_sym_decrypt
------------------
- Secret message.
-(1 row)
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.mdc.s2k1.z0
-
-jAwEBwEC/QTByBLI3b/SRAHPxKzI6SZBo5lAEOD+EsvKQWO4adL9tDY+++Iqy1xK
-4IaWXVKEj9R2Lr2xntWWMGZtcKtjD2lFFRXXd9dZp1ZThNDz
-=dbXm
------END PGP MESSAGE-----
-'), 'foobar');
- pgp_sym_decrypt
------------------
- Secret message.
-(1 row)
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.mdc.s2k3.z0
-
-jA0EBwMCEq4Su3ZqNEJg0kQB4QG5jBTKF0i04xtH+avzmLhstBNRxvV3nsmB3cwl
-z+9ZaA/XdSx5ZiFnMym8P6r8uY9rLjjNptvvRHlxIReF+p9MNg==
-=VJKg
------END PGP MESSAGE-----
-'), 'foobar');
- pgp_sym_decrypt
------------------
- Secret message.
-(1 row)
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes192.sha1.mdc.s2k0.z0
-
-jAQECAAC0kQBBDnQWkgsx9YFaqDfWmpsiyAJ6y2xG/sBvap1dySYEMuZ+wJTXQ9E
-Cr3i2M7TgVZ0M4jp4QL0adG1lpN5iK7aQeOwMw==
-=cg+i
------END PGP MESSAGE-----
-'), 'foobar');
- pgp_sym_decrypt
------------------
- Secret message.
-(1 row)
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes192.sha1.mdc.s2k1.z0
-
-jAwECAECruOfyNDFiTnSRAEVoGXm4A9UZKkWljdzjEO/iaE7mIraltIpQMkiqCh9
-7h8uZ2u9uRBOv222fZodGvc6bvq/4R4hAa/6qSHtm8mdmvGt
-=aHmC
------END PGP MESSAGE-----
-'), 'foobar');
- pgp_sym_decrypt
------------------
- Secret message.
-(1 row)
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes192.sha1.mdc.s2k3.z0
-
-jA0ECAMCjFn6SRi3SONg0kQBqtSHPaD0m7rXfDAhCWU/ypAsI93GuHGRyM99cvMv
-q6eF6859ZVnli3BFSDSk3a4e/pXhglxmDYCfjAXkozKNYLo6yw==
-=K0LS
------END PGP MESSAGE-----
-'), 'foobar');
- pgp_sym_decrypt
------------------
- Secret message.
-(1 row)
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes256.sha1.mdc.s2k0.z0
-
-jAQECQAC0kQB4L1eMbani07XF2ZYiXNK9LW3v8w41oUPl7dStmrJPQFwsdxmrDHu
-rQr3WbdKdY9ufjOE5+mXI+EFkSPrF9rL9NCq6w==
-=RGts
------END PGP MESSAGE-----
-'), 'foobar');
- pgp_sym_decrypt
------------------
- Secret message.
-(1 row)
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes256.sha1.mdc.s2k1.z0
-
-jAwECQECKHhrou7ZOIXSRAHWIVP+xjVQcjAVBTt+qh9SNzYe248xFTwozkwev3mO
-+KVJW0qhk0An+Y2KF99/bYFl9cL5D3Tl43fC8fXGl3x3m7pR
-=SUrU
------END PGP MESSAGE-----
-'), 'foobar');
- pgp_sym_decrypt
------------------
- Secret message.
-(1 row)
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes256.sha1.mdc.s2k3.z0
-
-jA0ECQMCjc8lwZu8Fz1g0kQBkEzjImi21liep5jj+3dAJ2aZFfUkohi8b3n9z+7+
-4+NRzL7cMW2RLAFnJbiqXDlRHMwleeuLN1up2WIxsxtYYuaBjA==
-=XZrG
------END PGP MESSAGE-----
-'), 'foobar');
- pgp_sym_decrypt
------------------
- Secret message.
-(1 row)
-
--- Checking longer passwords
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.mdc.s2k3.z0
-
-jA0EBwMCx6dBiuqrYNRg0kQBEo63AvA1SCslxP7ayanLf1H0/hlk2nONVhTwVEWi
-tTGup1mMz6Cfh1uDRErUuXpx9A0gdMu7zX0o5XjrL7WGDAZdSw==
-=XKKG
------END PGP MESSAGE-----
-'), '0123456789abcdefghij');
- pgp_sym_decrypt
------------------
- Secret message.
-(1 row)
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.mdc.s2k3.z0
-
-jA0EBwMCBDvYuS990iFg0kQBW31UK5OiCjWf5x6KJ8qNNT2HZWQCjCBZMU0XsOC6
-CMxFKadf144H/vpoV9GA0f22keQgCl0EsTE4V4lweVOPTKCMJg==
-=gWDh
------END PGP MESSAGE-----
-'), '0123456789abcdefghij2jk4h5g2j54khg23h54g2kh54g2khj54g23hj54');
- pgp_sym_decrypt
------------------
- Secret message.
-(1 row)
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.mdc.s2k3.z0
-
-jA0EBwMCqXbFafC+ofVg0kQBejyiPqH0QMERVGfmPOjtAxvyG5KDIJPYojTgVSDt
-FwsDabdQUz5O7bgNSnxfmyw1OifGF+W2bIn/8W+0rDf8u3+O+Q==
-=OxOF
------END PGP MESSAGE-----
-'), 'x');
- pgp_sym_decrypt
------------------
- Secret message.
-(1 row)
-
--- Checking various data
-select encode(digest(pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.mdc.s2k3.z0
-
-jA0EBwMCGJ+SpuOysINg0kQBJfSjzsW0x4OVcAyr17O7FBvMTwIGeGcJd99oTQU8
-Xtx3kDqnhUq9Z1fS3qPbi5iNP2A9NxOBxPWz2JzxhydANlgbxg==
-=W/ik
------END PGP MESSAGE-----
-'), '0123456789abcdefghij'), 'sha1'), 'hex');
- encode
-------------------------------------------
- 0225e3ede6f2587b076d021a189ff60aad67e066
-(1 row)
-
--- expected: 0225e3ede6f2587b076d021a189ff60aad67e066
-select encode(digest(pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat2.aes.sha1.mdc.s2k3.z0
-
-jA0EBwMCvdpDvidNzMxg0jUBvj8eS2+1t/9/zgemxvhtc0fvdKGGbjH7dleaTJRB
-SaV9L04ky1qECNDx3XjnoKLC+H7IOQ==
-=Fxen
------END PGP MESSAGE-----
-'), '0123456789abcdefghij'), 'sha1'), 'hex');
- encode
-------------------------------------------
- da39a3ee5e6b4b0d3255bfef95601890afd80709
-(1 row)
-
--- expected: da39a3ee5e6b4b0d3255bfef95601890afd80709
-select encode(digest(pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat3.aes.sha1.mdc.s2k3.z0
-
-jA0EBwMCxQvxJZ3G/HRg0lgBeYmTa7/uDAjPyFwSX4CYBgpZWVn/JS8JzILrcWF8
-gFnkUKIE0PSaYFp+Yi1VlRfUtRQ/X/LYNGa7tWZS+4VQajz2Xtz4vUeAEiYFYPXk
-73Hb8m1yRhQK
-=ivrD
------END PGP MESSAGE-----
-'), '0123456789abcdefghij'), 'sha1'), 'hex');
- encode
-------------------------------------------
- 5e5c135efc0dd00633efc6dfd6e731ea408a5b4c
-(1 row)
-
--- expected: 5e5c135efc0dd00633efc6dfd6e731ea408a5b4c
--- Checking CRLF
-select encode(digest(pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: crlf mess
-
-ww0ECQMCt7VAtby6l4Bi0lgB5KMIZiiF/b3CfMfUyY0eDncsGXtkbu1X+l9brjpMP8eJnY79Amms
-a3nsOzKTXUfS9VyaXo8IrncM6n7fdaXpwba/3tNsAhJG4lDv1k4g9v8Ix2dfv6Rs
-=mBP9
------END PGP MESSAGE-----
-'), 'key', 'convert-crlf=0'), 'sha1'), 'hex');
- encode
-------------------------------------------
- 9353062be7720f1446d30b9e75573a4833886784
-(1 row)
-
--- expected: 9353062be7720f1446d30b9e75573a4833886784
-select encode(digest(pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: crlf mess
-
-ww0ECQMCt7VAtby6l4Bi0lgB5KMIZiiF/b3CfMfUyY0eDncsGXtkbu1X+l9brjpMP8eJnY79Amms
-a3nsOzKTXUfS9VyaXo8IrncM6n7fdaXpwba/3tNsAhJG4lDv1k4g9v8Ix2dfv6Rs
-=mBP9
------END PGP MESSAGE-----
-'), 'key', 'convert-crlf=1'), 'sha1'), 'hex');
- encode
-------------------------------------------
- 7efefcab38467f7484d6fa43dc86cf5281bd78e2
-(1 row)
-
--- expected: 7efefcab38467f7484d6fa43dc86cf5281bd78e2
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/pgp-encrypt-DISABLED.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/pgp-encrypt-DISABLED.out b/contrib/pgcrypto/expected/pgp-encrypt-DISABLED.out
deleted file mode 100755
index 4122300..0000000
--- a/contrib/pgcrypto/expected/pgp-encrypt-DISABLED.out
+++ /dev/null
@@ -1 +0,0 @@
--- no random source
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/pgp-encrypt.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/pgp-encrypt.out b/contrib/pgcrypto/expected/pgp-encrypt.out
deleted file mode 100755
index ab33a04..0000000
--- a/contrib/pgcrypto/expected/pgp-encrypt.out
+++ /dev/null
@@ -1,189 +0,0 @@
---
--- PGP encrypt
---
-select pgp_sym_decrypt(pgp_sym_encrypt('Secret.', 'key'), 'key');
- pgp_sym_decrypt
------------------
- Secret.
-(1 row)
-
--- check whether the defaults are ok
-select pgp_sym_decrypt(pgp_sym_encrypt('Secret.', 'key'),
- 'key', 'expect-cipher-algo=aes128,
- expect-disable-mdc=0,
- expect-sess-key=0,
- expect-s2k-mode=3,
- expect-s2k-digest-algo=sha1,
- expect-compress-algo=0
- ');
- pgp_sym_decrypt
------------------
- Secret.
-(1 row)
-
--- maybe the expect- stuff simply does not work
-select pgp_sym_decrypt(pgp_sym_encrypt('Secret.', 'key'),
- 'key', 'expect-cipher-algo=bf,
- expect-disable-mdc=1,
- expect-sess-key=1,
- expect-s2k-mode=0,
- expect-s2k-digest-algo=md5,
- expect-compress-algo=1
- ');
-NOTICE: pgp_decrypt: unexpected cipher_algo: expected 4 got 7
-NOTICE: pgp_decrypt: unexpected s2k_mode: expected 0 got 3
-NOTICE: pgp_decrypt: unexpected s2k_digest_algo: expected 1 got 2
-NOTICE: pgp_decrypt: unexpected use_sess_key: expected 1 got 0
-NOTICE: pgp_decrypt: unexpected disable_mdc: expected 1 got 0
-NOTICE: pgp_decrypt: unexpected compress_algo: expected 1 got 0
- pgp_sym_decrypt
------------------
- Secret.
-(1 row)
-
--- bytea as text
-select pgp_sym_decrypt(pgp_sym_encrypt_bytea('Binary', 'baz'), 'baz');
-ERROR: Not text data
--- text as bytea
-select pgp_sym_decrypt_bytea(pgp_sym_encrypt('Text', 'baz'), 'baz');
- pgp_sym_decrypt_bytea
------------------------
- Text
-(1 row)
-
--- algorithm change
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 'cipher-algo=bf'),
- 'key', 'expect-cipher-algo=bf');
- pgp_sym_decrypt
------------------
- Secret.
-(1 row)
-
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 'cipher-algo=aes'),
- 'key', 'expect-cipher-algo=aes128');
- pgp_sym_decrypt
------------------
- Secret.
-(1 row)
-
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 'cipher-algo=aes192'),
- 'key', 'expect-cipher-algo=aes192');
- pgp_sym_decrypt
------------------
- Secret.
-(1 row)
-
--- s2k change
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 's2k-mode=0'),
- 'key', 'expect-s2k-mode=0');
- pgp_sym_decrypt
------------------
- Secret.
-(1 row)
-
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 's2k-mode=1'),
- 'key', 'expect-s2k-mode=1');
- pgp_sym_decrypt
------------------
- Secret.
-(1 row)
-
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 's2k-mode=3'),
- 'key', 'expect-s2k-mode=3');
- pgp_sym_decrypt
------------------
- Secret.
-(1 row)
-
--- s2k digest change
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 's2k-digest-algo=md5'),
- 'key', 'expect-s2k-digest-algo=md5');
- pgp_sym_decrypt
------------------
- Secret.
-(1 row)
-
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 's2k-digest-algo=sha1'),
- 'key', 'expect-s2k-digest-algo=sha1');
- pgp_sym_decrypt
------------------
- Secret.
-(1 row)
-
--- sess key
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 'sess-key=0'),
- 'key', 'expect-sess-key=0');
- pgp_sym_decrypt
------------------
- Secret.
-(1 row)
-
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 'sess-key=1'),
- 'key', 'expect-sess-key=1');
- pgp_sym_decrypt
------------------
- Secret.
-(1 row)
-
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 'sess-key=1, cipher-algo=bf'),
- 'key', 'expect-sess-key=1, expect-cipher-algo=bf');
- pgp_sym_decrypt
------------------
- Secret.
-(1 row)
-
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 'sess-key=1, cipher-algo=aes192'),
- 'key', 'expect-sess-key=1, expect-cipher-algo=aes192');
- pgp_sym_decrypt
------------------
- Secret.
-(1 row)
-
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 'sess-key=1, cipher-algo=aes256'),
- 'key', 'expect-sess-key=1, expect-cipher-algo=aes256');
- pgp_sym_decrypt
------------------
- Secret.
-(1 row)
-
--- no mdc
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 'disable-mdc=1'),
- 'key', 'expect-disable-mdc=1');
- pgp_sym_decrypt
------------------
- Secret.
-(1 row)
-
--- crlf
-select encode(pgp_sym_decrypt_bytea(
- pgp_sym_encrypt('1\n2\n3\r\n', 'key', 'convert-crlf=1'),
- 'key'), 'hex');
- encode
-----------------------
- 310d0a320d0a330d0d0a
-(1 row)
-
--- conversion should be lossless
-select encode(digest(pgp_sym_decrypt(
- pgp_sym_encrypt('\r\n0\n1\r\r\n\n2\r', 'key', 'convert-crlf=1'),
- 'key', 'convert-crlf=1'), 'sha1'), 'hex') as result,
- encode(digest('\r\n0\n1\r\r\n\n2\r', 'sha1'), 'hex') as expect;
- result | expect
-------------------------------------------+------------------------------------------
- 47bde5d88d6ef8770572b9cbb4278b402aa69966 | 47bde5d88d6ef8770572b9cbb4278b402aa69966
-(1 row)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/pgp-info.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/pgp-info.out b/contrib/pgcrypto/expected/pgp-info.out
deleted file mode 100755
index 1fe0088..0000000
--- a/contrib/pgcrypto/expected/pgp-info.out
+++ /dev/null
@@ -1,78 +0,0 @@
---
--- PGP info functions
---
--- pgp_key_id
-select pgp_key_id(dearmor(pubkey)) from keytbl where id=1;
- pgp_key_id
-------------------
- D936CF64BB73F466
-(1 row)
-
-select pgp_key_id(dearmor(pubkey)) from keytbl where id=2;
- pgp_key_id
-------------------
- 2C226E1FFE5CC7D4
-(1 row)
-
-select pgp_key_id(dearmor(pubkey)) from keytbl where id=3;
- pgp_key_id
-------------------
- B68504FD128E1FF9
-(1 row)
-
-select pgp_key_id(dearmor(pubkey)) from keytbl where id=4; -- should fail
-ERROR: No encryption key found
-select pgp_key_id(dearmor(pubkey)) from keytbl where id=5;
- pgp_key_id
-------------------
- D936CF64BB73F466
-(1 row)
-
-select pgp_key_id(dearmor(pubkey)) from keytbl where id=6;
- pgp_key_id
-------------------
- FD0206C409B74875
-(1 row)
-
-select pgp_key_id(dearmor(seckey)) from keytbl where id=1;
- pgp_key_id
-------------------
- D936CF64BB73F466
-(1 row)
-
-select pgp_key_id(dearmor(seckey)) from keytbl where id=2;
- pgp_key_id
-------------------
- 2C226E1FFE5CC7D4
-(1 row)
-
-select pgp_key_id(dearmor(seckey)) from keytbl where id=3;
- pgp_key_id
-------------------
- B68504FD128E1FF9
-(1 row)
-
-select pgp_key_id(dearmor(seckey)) from keytbl where id=4; -- should fail
-ERROR: No encryption key found
-select pgp_key_id(dearmor(seckey)) from keytbl where id=5;
- pgp_key_id
-------------------
- D936CF64BB73F466
-(1 row)
-
-select pgp_key_id(dearmor(seckey)) from keytbl where id=6;
- pgp_key_id
-------------------
- FD0206C409B74875
-(1 row)
-
-select pgp_key_id(dearmor(data)) as data_key_id
-from encdata order by id;
- data_key_id
-------------------
- D936CF64BB73F466
- 2C226E1FFE5CC7D4
- B68504FD128E1FF9
- FD0206C409B74875
-(4 rows)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/pgp-pubkey-DISABLED.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/pgp-pubkey-DISABLED.out b/contrib/pgcrypto/expected/pgp-pubkey-DISABLED.out
deleted file mode 100755
index d35c097..0000000
--- a/contrib/pgcrypto/expected/pgp-pubkey-DISABLED.out
+++ /dev/null
@@ -1 +0,0 @@
--- no bignum support
[11/11] incubator-hawq git commit: HAWQ-394. Remove pgcrypto from
code base
Posted by hu...@apache.org.
HAWQ-394. Remove pgcrypto from code base
Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/101adfab
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/101adfab
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/101adfab
Branch: refs/heads/master
Commit: 101adfab194f6ffa3daf8ad11b20373b922d6502
Parents: c66d69e
Author: Paul Guo <pa...@gmail.com>
Authored: Fri May 13 10:55:48 2016 +0800
Committer: Ruilong Huo <rh...@pivotal.io>
Committed: Mon May 16 14:40:42 2016 +0800
----------------------------------------------------------------------
contrib/pgcrypto/.gitignore | 9 -
contrib/pgcrypto/Makefile | 67 -
contrib/pgcrypto/README.pgcrypto | 702 ----
contrib/pgcrypto/blf.c | 499 ---
contrib/pgcrypto/blf.h | 46 -
contrib/pgcrypto/crypt-blowfish.c | 736 ----
contrib/pgcrypto/crypt-des.c | 775 ----
contrib/pgcrypto/crypt-gensalt.c | 188 -
contrib/pgcrypto/crypt-md5.c | 163 -
contrib/pgcrypto/expected/3des.out | 69 -
contrib/pgcrypto/expected/blowfish.out | 173 -
contrib/pgcrypto/expected/cast5.out | 86 -
contrib/pgcrypto/expected/crypt-blowfish.out | 27 -
contrib/pgcrypto/expected/crypt-des.out | 27 -
contrib/pgcrypto/expected/crypt-md5.out | 27 -
contrib/pgcrypto/expected/crypt-xdes.out | 27 -
contrib/pgcrypto/expected/des.out | 61 -
contrib/pgcrypto/expected/hmac-md5.out | 72 -
contrib/pgcrypto/expected/hmac-sha1.out | 72 -
contrib/pgcrypto/expected/init.out | 26 -
contrib/pgcrypto/expected/md5.out | 45 -
contrib/pgcrypto/expected/pgp-armor.out | 102 -
contrib/pgcrypto/expected/pgp-compression.out | 50 -
contrib/pgcrypto/expected/pgp-decrypt.out | 366 --
.../pgcrypto/expected/pgp-encrypt-DISABLED.out | 1 -
contrib/pgcrypto/expected/pgp-encrypt.out | 189 -
contrib/pgcrypto/expected/pgp-info.out | 78 -
.../pgcrypto/expected/pgp-pubkey-DISABLED.out | 1 -
.../pgcrypto/expected/pgp-pubkey-decrypt.out | 555 ---
.../pgcrypto/expected/pgp-pubkey-encrypt.out | 68 -
contrib/pgcrypto/expected/pgp-zlib-DISABLED.out | 1 -
contrib/pgcrypto/expected/rijndael.out | 124 -
contrib/pgcrypto/expected/sha1.out | 45 -
contrib/pgcrypto/expected/sha2.out | 108 -
contrib/pgcrypto/fortuna.c | 462 ---
contrib/pgcrypto/fortuna.h | 38 -
contrib/pgcrypto/imath.c | 3681 ------------------
contrib/pgcrypto/imath.h | 217 --
contrib/pgcrypto/internal-sha2.c | 316 --
contrib/pgcrypto/internal.c | 691 ----
contrib/pgcrypto/mbuf.c | 563 ---
contrib/pgcrypto/mbuf.h | 124 -
contrib/pgcrypto/md5.c | 398 --
contrib/pgcrypto/md5.h | 79 -
contrib/pgcrypto/openssl.c | 1036 -----
contrib/pgcrypto/package/Makefile | 29 -
contrib/pgcrypto/package/gppkg_spec.yml.in | 8 -
contrib/pgcrypto/package/pgcrypto.spec | 20 -
contrib/pgcrypto/pgcrypto.c | 508 ---
contrib/pgcrypto/pgcrypto.h | 49 -
contrib/pgcrypto/pgcrypto.sql.in | 203 -
contrib/pgcrypto/pgp-armor.c | 383 --
contrib/pgcrypto/pgp-cfb.c | 265 --
contrib/pgcrypto/pgp-compress.c | 329 --
contrib/pgcrypto/pgp-decrypt.c | 1188 ------
contrib/pgcrypto/pgp-encrypt.c | 708 ----
contrib/pgcrypto/pgp-info.c | 235 --
contrib/pgcrypto/pgp-mpi-internal.c | 308 --
contrib/pgcrypto/pgp-mpi-openssl.c | 285 --
contrib/pgcrypto/pgp-mpi.c | 143 -
contrib/pgcrypto/pgp-pgsql.c | 921 -----
contrib/pgcrypto/pgp-pubdec.c | 236 --
contrib/pgcrypto/pgp-pubenc.c | 250 --
contrib/pgcrypto/pgp-pubkey.c | 584 ---
contrib/pgcrypto/pgp-s2k.c | 302 --
contrib/pgcrypto/pgp.c | 360 --
contrib/pgcrypto/pgp.h | 314 --
contrib/pgcrypto/px-crypt.c | 167 -
contrib/pgcrypto/px-crypt.h | 82 -
contrib/pgcrypto/px-hmac.c | 179 -
contrib/pgcrypto/px.c | 443 ---
contrib/pgcrypto/px.h | 249 --
contrib/pgcrypto/random.c | 244 --
contrib/pgcrypto/rijndael.c | 677 ----
contrib/pgcrypto/rijndael.h | 60 -
contrib/pgcrypto/rijndael.tbl | 1139 ------
contrib/pgcrypto/sha1.c | 342 --
contrib/pgcrypto/sha1.h | 75 -
contrib/pgcrypto/sha2.c | 991 -----
contrib/pgcrypto/sha2.h | 100 -
contrib/pgcrypto/sql/3des.sql | 30 -
contrib/pgcrypto/sql/blowfish.sql | 91 -
contrib/pgcrypto/sql/cast5.sql | 46 -
contrib/pgcrypto/sql/crypt-blowfish.sql | 18 -
contrib/pgcrypto/sql/crypt-des.sql | 18 -
contrib/pgcrypto/sql/crypt-md5.sql | 18 -
contrib/pgcrypto/sql/crypt-xdes.sql | 18 -
contrib/pgcrypto/sql/des.sql | 28 -
contrib/pgcrypto/sql/hmac-md5.sql | 46 -
contrib/pgcrypto/sql/hmac-sha1.sql | 46 -
contrib/pgcrypto/sql/init.sql | 18 -
contrib/pgcrypto/sql/md5.sql | 12 -
contrib/pgcrypto/sql/pgp-armor.sql | 56 -
contrib/pgcrypto/sql/pgp-compression.sql | 31 -
contrib/pgcrypto/sql/pgp-decrypt.sql | 266 --
contrib/pgcrypto/sql/pgp-encrypt-DISABLED.sql | 3 -
contrib/pgcrypto/sql/pgp-encrypt.sql | 96 -
contrib/pgcrypto/sql/pgp-info.sql | 23 -
contrib/pgcrypto/sql/pgp-pubkey-DISABLED.sql | 3 -
contrib/pgcrypto/sql/pgp-pubkey-decrypt.sql | 549 ---
contrib/pgcrypto/sql/pgp-pubkey-encrypt.sql | 50 -
contrib/pgcrypto/sql/pgp-zlib-DISABLED.sql | 3 -
contrib/pgcrypto/sql/rijndael.sql | 62 -
contrib/pgcrypto/sql/sha1.sql | 12 -
contrib/pgcrypto/sql/sha2.sql | 28 -
contrib/pgcrypto/uninstall_pgcrypto.sql | 46 -
pom.xml | 1 -
107 files changed, 27184 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/.gitignore
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/.gitignore b/contrib/pgcrypto/.gitignore
deleted file mode 100644
index c752e80..0000000
--- a/contrib/pgcrypto/.gitignore
+++ /dev/null
@@ -1,9 +0,0 @@
-libpgcrypto.a
-libpgcrypto.so
-libpgcrypto.so.0
-libpgcrypto.so.0.0
-pgcrypto.sql
-log
-results
-tmp_check
-tmpdir/
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/Makefile
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/Makefile b/contrib/pgcrypto/Makefile
deleted file mode 100644
index 4cb3435..0000000
--- a/contrib/pgcrypto/Makefile
+++ /dev/null
@@ -1,67 +0,0 @@
-#
-# $PostgreSQL: pgsql/contrib/pgcrypto/Makefile,v 1.27 2007/11/10 23:59:51 momjian Exp $
-#
-
-INT_SRCS = md5.c sha1.c sha2.c internal.c internal-sha2.c blf.c rijndael.c \
- fortuna.c random.c pgp-mpi-internal.c imath.c
-INT_TESTS = sha2
-
-OSSL_SRCS = openssl.c pgp-mpi-openssl.c
-OSSL_TESTS = sha2 des 3des cast5
-
-ZLIB_TST = pgp-compression
-ZLIB_OFF_TST = pgp-zlib-DISABLED
-
-CF_SRCS = $(if $(subst no,,$(with_openssl)), $(OSSL_SRCS), $(INT_SRCS))
-CF_TESTS = $(if $(subst no,,$(with_openssl)), $(OSSL_TESTS), $(INT_TESTS))
-CF_PGP_TESTS = $(if $(subst no,,$(with_zlib)), $(ZLIB_TST), $(ZLIB_OFF_TST))
-
-SRCS = pgcrypto.c px.c px-hmac.c px-crypt.c \
- crypt-gensalt.c crypt-blowfish.c crypt-des.c \
- crypt-md5.c $(CF_SRCS) \
- mbuf.c pgp.c pgp-armor.c pgp-cfb.c pgp-compress.c \
- pgp-decrypt.c pgp-encrypt.c pgp-info.c pgp-mpi.c \
- pgp-pubdec.c pgp-pubenc.c pgp-pubkey.c pgp-s2k.c \
- pgp-pgsql.c
-
-MODULE_big = pgcrypto
-OBJS = $(SRCS:.c=.o)
-DATA_built = pgcrypto.sql
-DATA = uninstall_pgcrypto.sql
-EXTRA_CLEAN = gen-rtab
-
-# TODO: MPP-14272
-# REGRESS = init md5 sha1 hmac-md5 hmac-sha1 blowfish rijndael \
-# $(CF_TESTS) \
-# crypt-des crypt-md5 crypt-blowfish crypt-xdes \
-# pgp-armor pgp-decrypt pgp-encrypt $(CF_PGP_TESTS) \
-# pgp-pubkey-decrypt pgp-pubkey-encrypt pgp-info
-REGRESS = init md5 sha1
-
-
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pgcrypto
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_builddir)/contrib/contrib-global.mk
-endif
-
-# Add libraries that pgcrypto depends (or might depend) on into the
-# shared library link. (The order in which you list them here doesn't
-# matter.)
-SHLIB_LINK += $(filter -lcrypto -lz, $(LIBS))
-ifeq ($(PORTNAME), win32)
-SHLIB_LINK += $(filter -leay32, $(LIBS))
-# those must be at the end
-SHLIB_LINK += -lwsock32 -lws2_32
-endif
-
-rijndael.o: rijndael.tbl
-
-rijndael.tbl:
- $(CC) $(CPPFLAGS) $(CFLAGS) -DPRINT_TABS rijndael.c -o gen-rtab
- ./gen-rtab > rijndael.tbl
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/README.pgcrypto
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/README.pgcrypto b/contrib/pgcrypto/README.pgcrypto
deleted file mode 100755
index 7b196d9..0000000
--- a/contrib/pgcrypto/README.pgcrypto
+++ /dev/null
@@ -1,702 +0,0 @@
-pgcrypto - cryptographic functions for PostgreSQL
-=================================================
-Marko Kreen <ma...@gmail.com>
-
-// Note: this document is in asciidoc format.
-
-
-1. Installation
------------------
-
-// Note: These installation instructions assume you have obtained a
- pgcrypto package from Greenplum.
-
-Run:
-gppkg --install $GPHOME/share/packages/archive/pgcryptXXX.gppkg
-
-psql -d <database> -f $GPHOME/share/postgresql/contrib/pgcrypto.sql
-
-// Note: To uninstall the pgcrypto objects, use uninstall_pgcrypto.sql
-
-
-2. Notes
-----------
-
-2.1. Configuration
-~~~~~~~~~~~~~~~~~~~~
-
-Greenplum's build of pgcrypto is compiled with zlib and
-OpenSSL linked in.
-
-When compiled with zlib, PGP encryption functions are able to
-compress data before encrypting.
-
-When compiled with OpenSSL there will be more algorithms available.
-Also public-key encryption functions will be faster as OpenSSL
-has more optimized BIGNUM functions.
-
-Summary of functionality with and without OpenSSL:
-
-`----------------------------`---------`------------
- Functionality built-in OpenSSL
-----------------------------------------------------
- MD5 yes yes
- SHA1 yes yes
- SHA224/256/384/512 yes yes (3)
- Any other digest algo no yes (1)
- Blowfish yes yes
- AES yes yes (2)
- DES/3DES/CAST5 no yes
- Raw encryption yes yes
- PGP Symmetric encryption yes yes
- PGP Public-Key encryption yes yes
-----------------------------------------------------
-
-1. Any digest algorithm OpenSSL supports is automatically picked up.
- This is not possible with ciphers, which need to be supported
- explicitly.
-
-2. AES is included in OpenSSL since version 0.9.7. If pgcrypto is
- compiled against older version, it will use built-in AES code,
- so it has AES always available.
-
-3. SHA2 algorithms were added to OpenSSL in version 0.9.8. For
- older versions, pgcrypto will use built-in code.
-
-
-2.2. NULL handling
-~~~~~~~~~~~~~~~~~~~~
-
-As standard in SQL, all functions return NULL, if any of the arguments
-are NULL. This may create security risks on careless usage.
-
-
-2.3. Security
-~~~~~~~~~~~~~~~
-
-All the functions here run inside database server. That means that all
-the data and passwords move between pgcrypto and client application in
-clear-text. Thus you must:
-
-1. Connect locally or use SSL connections.
-2. Trust both system and database administrator.
-
-If you cannot, then better do crypto inside client application.
-
-
-3. General hashing
---------------------
-
-3.1. digest(data, type)
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
- digest(data text, type text) RETURNS bytea
- digest(data bytea, type text) RETURNS bytea
-
-Type is here the algorithm to use. Standard algorithms are `md5` and
-`sha1`, although there may be more supported, depending on build
-options.
-
-Returns binary hash.
-
-If you want hexadecimal string, use `encode()` on result. Example:
-
- CREATE OR REPLACE FUNCTION sha1(bytea) RETURNS text AS $$
- SELECT encode(digest($1, 'sha1'), 'hex')
- $$ LANGUAGE SQL STRICT IMMUTABLE;
-
-
-3.2. hmac(data, key, type)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- hmac(data text, key text, type text) RETURNS bytea
- hmac(data bytea, key text, type text) RETURNS bytea
-
-Calculates Hashed MAC over data. `type` is the same as in `digest()`.
-If the key is larger than hash block size it will first hashed and the
-hash will be used as key.
-
-It is similar to digest() but the hash can be recalculated only knowing
-the key. This avoids the scenario of someone altering data and also
-changing the hash.
-
-Returns binary hash.
-
-
-
-4. Password hashing
----------------------
-
-The functions `crypt()` and `gen_salt()` are specifically designed
-for hashing passwords. `crypt()` does the hashing and `gen_salt()`
-prepares algorithm parameters for it.
-
-The algorithms in `crypt()` differ from usual hashing algorithms like
-MD5 or SHA1 in following respects:
-
-1. They are slow. As the amount of data is so small, this is only
- way to make brute-forcing passwords hard.
-2. Include random 'salt' with result, so that users having same
- password would have different crypted passwords. This is also
- additional defense against reversing the algorithm.
-3. Include algorithm type in the result, so passwords hashed with
- different algorithms can co-exist.
-4. Some of them are adaptive - that means after computers get
- faster, you can tune the algorithm to be slower, without
- introducing incompatibility with existing passwords.
-
-Supported algorithms:
-`------`-------------`---------`----------`---------------------------
- Type Max password Adaptive Salt bits Description
-----------------------------------------------------------------------
-`bf` 72 yes 128 Blowfish-based, variant 2a
-`md5` unlimited no 48 md5-based crypt()
-`xdes` 8 yes 24 Extended DES
-`des` 8 no 12 Original UNIX crypt
-----------------------------------------------------------------------
-
-
-4.1. crypt(password, salt)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- crypt(password text, salt text) RETURNS text
-
-Calculates UN*X crypt(3) style hash of password. When storing new
-password, you need to use function `gen_salt()` to generate new salt.
-When checking password you should use existing hash as salt.
-
-Example - setting new password:
-
- UPDATE .. SET pswhash = crypt('new password', gen_salt('md5'));
-
-Example - authentication:
-
- SELECT pswhash = crypt('entered password', pswhash) WHERE .. ;
-
-returns true or false whether the entered password is correct.
-It also can return NULL if `pswhash` field is NULL.
-
-
-4.2. gen_salt(type)
-~~~~~~~~~~~~~~~~~~~~~
-
- gen_salt(type text) RETURNS text
-
-Generates a new random salt for usage in `crypt()`. For adaptible
-algorithms, it uses the default iteration count.
-
-Accepted types are: `des`, `xdes`, `md5` and `bf`.
-
-
-4.3. gen_salt(type, rounds)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- gen_salt(type text, rounds integer) RETURNS text
-
-Same as above, but lets user specify iteration count for some
-algorithms. The higher the count, the more time it takes to hash
-the password and therefore the more time to break it. Although with
-too high count the time to calculate a hash may be several years
-- which is somewhat impractical.
-
-Number is algorithm specific:
-
-`-----'---------'-----'----------
- type default min max
----------------------------------
- `xdes` 725 1 16777215
- `bf` 6 4 31
----------------------------------
-
-In case of xdes there is a additional limitation that the count must be
-a odd number.
-
-Notes:
-
-- Original DES crypt was designed to have the speed of 4 hashes per
- second on the hardware of that time.
-- Slower than 4 hashes per second would probably dampen usability.
-- Faster than 100 hashes per second is probably too fast.
-- See next section about possible values for `crypt-bf`.
-
-
-4.4. Comparison of crypt and regular hashes
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Here is a table that should give overview of relative slowness
-of different hashing algorithms.
-
-* The goal is to crack a 8-character password, which consists:
- 1. Only of lowercase letters
- 2. Numbers, lower- and uppercase letters.
-* The table below shows how much time it would take to try all
- combinations of characters.
-* The `crypt-bf` is featured in several settings - the number
- after slash is the `rounds` parameter of `gen_salt()`.
-
-`------------'----------'--------------'--------------------
-Algorithm Hashes/sec Chars: [a-z] Chars: [A-Za-z0-9]
-------------------------------------------------------------
-crypt-bf/8 28 246 years 251322 years
-crypt-bf/7 57 121 years 123457 years
-crypt-bf/6 112 62 years 62831 years
-crypt-bf/5 211 33 years 33351 years
-crypt-md5 2681 2.6 years 2625 years
-crypt-des 362837 7 days 19 years
-sha1 590223 4 days 12 years
-md5 2345086 1 day 3 years
-------------------------------------------------------------
-
-* The machine used is 1.5GHz Pentium 4.
-* crypt-des and crypt-md5 algorithm numbers are taken from
- John the Ripper v1.6.38 `-test` output.
-* MD5 numbers are from mdcrack 1.2.
-* SHA1 numbers are from lcrack-20031130-beta.
-* `crypt-bf` numbers are taken using simple program that loops
- over 1000 8-character passwords. That way I can show the speed with
- different number of rounds. For reference: `john -test` shows 213
- loops/sec for crypt-bf/5. (The small difference in results is in
- accordance to the fact that the `crypt-bf` implementation in pgcrypto
- is same one that is used in John the Ripper.)
-
-Note that "try all combinations" is not a realistic exercise.
-Usually password cracking is done with the help of dictionaries, which
-contain both regular words and various mutations of them. So, even
-somewhat word-like passwords could be cracked much faster than the above
-numbers suggest, and a 6-character non-word like password may escape
-cracking. Or not.
-
-
-5. PGP encryption
--------------------
-
-The functions here implement the encryption part of OpenPGP (RFC2440)
-standard. Supported are both symmetric-key and public-key encryption.
-
-
-5.1. Overview
-~~~~~~~~~~~~~~~
-
-Encrypted PGP message consists of 2 packets:
-
-- Packet for session key - either symmetric- or public-key encrypted.
-- Packet for session-key encrypted data.
-
-When encrypting with password:
-
-1. Given password is hashed using String2Key (S2K) algorithm. This
- is rather similar to `crypt()` algorithm - purposefully slow
- and with random salt - but it produces a full-length binary key.
-2. If separate session key is requested, new random key will be
- generated. Otherwise S2K key will be used directly as session key.
-3. If S2K key is to be used directly, then only S2K settings will be put
- into session key packet. Otherwise session key will be encrypted with
- S2K key and put into session key packet.
-
-When encrypting with public key:
-
-1. New random session key is generated.
-2. It is encrypted using public key and put into session key packet.
-
-Now common part, the session-key encrypted data packet:
-
-1. Optional data-manipulation: compression, conversion to UTF-8,
- conversion of line-endings.
-2. Data is prefixed with block of random bytes. This is equal
- to using random IV.
-3. A SHA1 hash of random prefix and data is appended.
-4. All this is encrypted with session key.
-
-
-5.2. pgp_sym_encrypt(data, psw)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- pgp_sym_encrypt(data text, psw text [, options text] ) RETURNS bytea
- pgp_sym_encrypt_bytea(data bytea, psw text [, options text] ) RETURNS bytea
-
-Return a symmetric-key encrypted PGP message.
-
-Options are described in section 5.8.
-
-
-5.3. pgp_sym_decrypt(msg, psw)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- pgp_sym_decrypt(msg bytea, psw text [, options text] ) RETURNS text
- pgp_sym_decrypt_bytea(msg bytea, psw text [, options text] ) RETURNS bytea
-
-Decrypt a symmetric-key encrypted PGP message.
-
-Decrypting bytea data with `pgp_sym_decrypt` is disallowed.
-This is to avoid outputting invalid character data. Decrypting
-originally textual data with `pgp_sym_decrypt_bytea` is fine.
-
-Options are described in section 5.8.
-
-
-5.4. pgp_pub_encrypt(data, pub_key)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- pgp_pub_encrypt(data text, key bytea [, options text] ) RETURNS bytea
- pgp_pub_encrypt_bytea(data bytea, key bytea [, options text] ) RETURNS bytea
-
-Encrypt data with a public key. Giving this function a secret key will
-produce a error.
-
-Options are described in section 5.8.
-
-
-5.5. pgp_pub_decrypt(msg, sec_key [, psw])
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- pgp_pub_decrypt(msg bytea, key bytea [, psw text [, options text]] ) \
- RETURNS text
- pgp_pub_decrypt_bytea(msg bytea, key bytea [,psw text [, options text]] ) \
- RETURNS bytea
-
-Decrypt a public-key encrypted message with secret key. If the secret
-key is password-protected, you must give the password in `psw`. If
-there is no password, but you want to specify option for function, you
-need to give empty password.
-
-Decrypting bytea data with `pgp_pub_decrypt` is disallowed.
-This is to avoid outputting invalid character data. Decrypting
-originally textual data with `pgp_pub_decrypt_bytea` is fine.
-
-Options are described in section 5.8.
-
-
-5.6. pgp_key_id(key / msg)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- pgp_key_id(key or msg bytea) RETURNS text
-
-It shows you either key ID if given PGP public or secret key. Or it
-gives the key ID that was used for encrypting the data, if given
-encrypted message.
-
-It can return 2 special key IDs:
-
-SYMKEY::
- The data is encrypted with symmetric key.
-
-ANYKEY::
- The data is public-key encrypted, but the key ID is cleared.
- That means you need to try all your secret keys on it to see
- which one decrypts it. pgcrypto itself does not produce such
- messages.
-
-Note that different keys may have same ID. This is rare but normal
-event. Client application should then try to decrypt with each one,
-to see which fits - like handling ANYKEY.
-
-
-5.7. armor / dearmor
-~~~~~~~~~~~~~~~~~~~~~~
-
- armor(data bytea) RETURNS text
- dearmor(data text) RETURNS bytea
-
-Those wrap/unwrap data into PGP Ascii Armor which is basically Base64
-with CRC and additional formatting.
-
-
-5.8. Options for PGP functions
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Options are named to be similar to GnuPG. Values should be given after
-an equal sign; separate options from each other with commas. Example:
-
- pgp_sym_encrypt(data, psw, 'compress-algo=1, cipher-algo=aes256')
-
-All of the options except `convert-crlf` apply only to encrypt
-functions. Decrypt functions get the parameters from PGP data.
-
-Most interesting options are probably `compression-algo` and
-`unicode-mode`. The rest should have reasonable defaults.
-
-
-cipher-algo::
- What cipher algorithm to use.
-
- Values: bf, aes128, aes192, aes256 (OpenSSL-only: `3des`, `cast5`)
- Default: aes128
- Applies: pgp_sym_encrypt, pgp_pub_encrypt
-
-compress-algo::
- Which compression algorithm to use. Needs building with zlib.
-
- Values:
- 0 - no compression
- 1 - ZIP compression
- 2 - ZLIB compression [=ZIP plus meta-data and block-CRC's]
- Default: 0
- Applies: pgp_sym_encrypt, pgp_pub_encrypt
-
-compress-level::
- How much to compress. Bigger level compresses smaller but is slower.
- 0 disables compression.
-
- Values: 0, 1-9
- Default: 6
- Applies: pgp_sym_encrypt, pgp_pub_encrypt
-
-convert-crlf::
- Whether to convert `\n` into `\r\n` when encrypting and `\r\n` to `\n`
- when decrypting. RFC2440 specifies that text data should be stored
- using `\r\n` line-feeds. Use this to get fully RFC-compliant
- behavior.
-
- Values: 0, 1
- Default: 0
- Applies: pgp_sym_encrypt, pgp_pub_encrypt, pgp_sym_decrypt, pgp_pub_decrypt
-
-disable-mdc::
- Do not protect data with SHA-1. Only good reason to use this
- option is to achieve compatibility with ancient PGP products, as the
- SHA-1 protected packet is from upcoming update to RFC2440. (Currently
- at version RFC2440bis-14.) Recent gnupg.org and pgp.com software
- supports it fine.
-
- Values: 0, 1
- Default: 0
- Applies: pgp_sym_encrypt, pgp_pub_encrypt
-
-enable-session-key::
- Use separate session key. Public-key encryption always uses separate
- session key, this is for symmetric-key encryption, which by default
- uses S2K directly.
-
- Values: 0, 1
- Default: 0
- Applies: pgp_sym_encrypt
-
-s2k-mode::
- Which S2K algorithm to use.
-
- Values:
- 0 - Without salt. Dangerous!
- 1 - With salt but with fixed iteration count.
- 3 - Variable iteration count.
- Default: 3
- Applies: pgp_sym_encrypt
-
-s2k-digest-algo::
- Which digest algorithm to use in S2K calculation.
-
- Values: md5, sha1
- Default: sha1
- Applies: pgp_sym_encrypt
-
-s2k-cipher-algo::
- Which cipher to use for encrypting separate session key.
-
- Values: bf, aes, aes128, aes192, aes256
- Default: use cipher-algo.
- Applies: pgp_sym_encrypt
-
-unicode-mode::
- Whether to convert textual data from database internal encoding to
- UTF-8 and back. If your database already is UTF-8, no conversion will
- be done, only the data will be tagged as UTF-8. Without this option
- it will not be.
-
- Values: 0, 1
- Default: 0
- Applies: pgp_sym_encrypt, pgp_pub_encrypt
-
-
-5.9. Generating keys with GnuPG
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Generate a new key:
-
- gpg --gen-key
-
-The preferred key type is "DSA and Elgamal".
-
-For RSA encryption you must create either DSA or RSA sign-only key
-as master and then add RSA encryption subkey with `gpg --edit-key`.
-
-List keys:
-
- gpg --list-secret-keys
-
-Export ascii-armored public key:
-
- gpg -a --export KEYID > public.key
-
-Export ascii-armored secret key:
-
- gpg -a --export-secret-keys KEYID > secret.key
-
-You need to use `dearmor()` on them before giving them to
-pgp_pub_* functions. Or if you can handle binary data, you can drop
-"-a" from gpg.
-
-For more details see `man gpg`, http://www.gnupg.org/gph/en/manual.html[
-The GNU Privacy Handbook] and other docs on http://www.gnupg.org[] site.
-
-
-5.10. Limitations of PGP code
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-- No support for signing. That also means that it is not checked
- whether the encryption subkey belongs to master key.
-
-- No support for encryption key as master key. As such practice
- is generally discouraged, it should not be a problem.
-
-- No support for several subkeys. This may seem like a problem, as this
- is common practice. On the other hand, you should not use your regular
- GPG/PGP keys with pgcrypto, but create new ones, as the usage scenario
- is rather different.
-
-
-6. Raw encryption
--------------------
-
-Those functions only run a cipher over data, they don't have any advanced
-features of PGP encryption. Therefore they have some major problems:
-
-1. They use user key directly as cipher key.
-2. They don't provide any integrity checking, to see
- if the encrypted data was modified.
-3. They expect that users manage all encryption parameters
- themselves, even IV.
-4. They don't handle text.
-
-So, with the introduction of PGP encryption, usage of raw
-encryption functions is discouraged.
-
-
- encrypt(data bytea, key bytea, type text) RETURNS bytea
- decrypt(data bytea, key bytea, type text) RETURNS bytea
-
- encrypt_iv(data bytea, key bytea, iv bytea, type text) RETURNS bytea
- decrypt_iv(data bytea, key bytea, iv bytea, type text) RETURNS bytea
-
-Encrypt/decrypt data with cipher, padding data if needed.
-
-`type` parameter description in pseudo-noteup:
-
- algo ['-' mode] ['/pad:' padding]
-
-Supported algorithms:
-
-* `bf` - Blowfish
-* `aes` - AES (Rijndael-128)
-
-Modes:
-
-* `cbc` - next block depends on previous. (default)
-* `ecb` - each block is encrypted separately.
- (for testing only)
-
-Padding:
-
-* `pkcs` - data may be any length (default)
-* `none` - data must be multiple of cipher block size.
-
-IV is initial value for mode, defaults to all zeroes. It is ignored for
-ECB. It is clipped or padded with zeroes if not exactly block size.
-
-So, example:
-
- encrypt(data, 'fooz', 'bf')
-
-is equal to
-
- encrypt(data, 'fooz', 'bf-cbc/pad:pkcs')
-
-
-7. Random bytes
------------------
-
- gen_random_bytes(count integer)
-
-Returns `count` cryptographically strong random bytes as bytea value.
-There can be maximally 1024 bytes extracted at a time. This is to avoid
-draining the randomness generator pool.
-
-
-8. Credits
-------------
-
-I have used code from following sources:
-
-`--------------------`-------------------------`-------------------------------
- Algorithm Author Source origin
--------------------------------------------------------------------------------
- DES crypt() David Burren and others FreeBSD libcrypt
- MD5 crypt() Poul-Henning Kamp FreeBSD libcrypt
- Blowfish crypt() Solar Designer www.openwall.com
- Blowfish cipher Niels Provos OpenBSD sys/crypto
- Rijndael cipher Brian Gladman OpenBSD sys/crypto
- MD5 and SHA1 WIDE Project KAME kame/sys/crypto
- SHA256/384/512 Aaron D. Gifford OpenBSD sys/crypto
- BIGNUM math Michael J. Fromberger dartmouth.edu/~sting/sw/imath
--------------------------------------------------------------------------------
-
-
-9. Legalese
--------------
-
-* I owe a beer to Poul-Henning.
-* This product includes software developed by Niels Provos.
-
-
-10. References/Links
-----------------------
-
-10.1. Useful reading
-~~~~~~~~~~~~~~~~~~~~~~
-
-http://www.gnupg.org/gph/en/manual.html[]::
- The GNU Privacy Handbook
-
-http://www.openwall.com/crypt/[]::
- Describes the crypt-blowfish algorithm.
-
-http://www.stack.nl/~galactus/remailers/passphrase-faq.html[]::
- How to choose good password.
-
-http://world.std.com/~reinhold/diceware.html[]::
- Interesting idea for picking passwords.
-
-http://www.interhack.net/people/cmcurtin/snake-oil-faq.html[]::
- Describes good and bad cryptography.
-
-
-10.2. Technical references
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-http://www.ietf.org/rfc/rfc2440.txt[]::
- OpenPGP message format
-
-http://www.imc.org/draft-ietf-openpgp-rfc2440bis[]::
- New version of RFC2440.
-
-http://www.ietf.org/rfc/rfc1321.txt[]::
- The MD5 Message-Digest Algorithm
-
-http://www.ietf.org/rfc/rfc2104.txt[]::
- HMAC: Keyed-Hashing for Message Authentication
-
-http://www.usenix.org/events/usenix99/provos.html[]::
- Comparison of crypt-des, crypt-md5 and bcrypt algorithms.
-
-http://csrc.nist.gov/cryptval/des.htm[]::
- Standards for DES, 3DES and AES.
-
-http://en.wikipedia.org/wiki/Fortuna_(PRNG)[]::
- Description of Fortuna CSPRNG.
-
-http://jlcooke.ca/random/[]::
- Jean-Luc Cooke Fortuna-based /dev/random driver for Linux.
-
-http://www.cs.ut.ee/~helger/crypto/[]::
- Collection of cryptology pointers.
-
-
-// $PostgreSQL: pgsql/contrib/pgcrypto/README.pgcrypto,v 1.18 2006/09/05 21:26:48 tgl Exp $
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/blf.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/blf.c b/contrib/pgcrypto/blf.c
deleted file mode 100644
index e03c542..0000000
--- a/contrib/pgcrypto/blf.c
+++ /dev/null
@@ -1,499 +0,0 @@
-/*
- * Butchered version of sshblowf.c from putty-0.59.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/blf.c,v 1.10 2009/06/11 14:48:52 momjian Exp $
- */
-
-/*
- * PuTTY is copyright 1997-2007 Simon Tatham.
- *
- * Portions copyright Robert de Bath, Joris van Rantwijk, Delian
- * Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas Barry,
- * Justin Bradford, Ben Harris, Malcolm Smith, Ahmad Khalifa, Markus
- * Kuhn, and CORE SDI S.A.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation files
- * (the "Software"), to deal in the Software without restriction,
- * including without limitation the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE
- * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
- * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * Blowfish implementation for PuTTY.
- *
- * Coded from scratch from the algorithm description.
- */
-
-#include "postgres.h"
-#include "blf.h"
-
-#define GET_32BIT_MSB_FIRST(p) ( \
- ((p)[0] << 24) | ((p)[1] << 16) | ((p)[2] << 8) | ((p)[3]) )
-
-#define PUT_32BIT_MSB_FIRST(p, v) do { \
- (p)[0] = v >> 24; \
- (p)[1] = v >> 16; \
- (p)[2] = v >> 8; \
- (p)[3] = v; \
-} while (0)
-
-/*
- * The Blowfish init data: hex digits of the fractional part of pi.
- * (ie pi as a hex fraction is 3.243F6A8885A308D3...)
- */
-static const uint32 parray[] = {
- 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, 0xA4093822, 0x299F31D0,
- 0x082EFA98, 0xEC4E6C89, 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,
- 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917, 0x9216D5D9, 0x8979FB1B,
-};
-
-static const uint32 sbox0[] = {
- 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7, 0xB8E1AFED, 0x6A267E96,
- 0xBA7C9045, 0xF12C7F99, 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,
- 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E, 0x0D95748F, 0x728EB658,
- 0x718BCD58, 0x82154AEE, 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,
- 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF, 0x8E79DCB0, 0x603A180E,
- 0x6C9E0E8B, 0xB01E8A3E, 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,
- 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440, 0x55CA396A, 0x2AAB10B6,
- 0xB4CC5C34, 0x1141E8CE, 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,
- 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E, 0xAFD6BA33, 0x6C24CF5C,
- 0x7A325381, 0x28958677, 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,
- 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032, 0xEF845D5D, 0xE98575B1,
- 0xDC262302, 0xEB651B88, 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,
- 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E, 0x21C66842, 0xF6E96C9A,
- 0x670C9C61, 0xABD388F0, 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,
- 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98, 0xA1F1651D, 0x39AF0176,
- 0x66CA593E, 0x82430E88, 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,
- 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6, 0x4ED3AA62, 0x363F7706,
- 0x1BFEDF72, 0x429B023D, 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,
- 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7, 0xE3FE501A, 0xB6794C3B,
- 0x976CE0BD, 0x04C006BA, 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,
- 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F, 0x6DFC511F, 0x9B30952C,
- 0xCC814544, 0xAF5EBD09, 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,
- 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB, 0x5579C0BD, 0x1A60320A,
- 0xD6A100C6, 0x402C7279, 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,
- 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB, 0x323DB5FA, 0xFD238760,
- 0x53317B48, 0x3E00DF82, 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,
- 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573, 0x695B27B0, 0xBBCA58C8,
- 0xE1FFA35D, 0xB8F011A0, 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,
- 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790, 0xE1DDF2DA, 0xA4CB7E33,
- 0x62FB1341, 0xCEE4C6E8, 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,
- 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0, 0xD08ED1D0, 0xAFC725E0,
- 0x8E3C5B2F, 0x8E7594B7, 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,
- 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD, 0x2F2F2218, 0xBE0E1777,
- 0xEA752DFE, 0x8B021FA1, 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,
- 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9, 0x165FA266, 0x80957705,
- 0x93CC7314, 0x211A1477, 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,
- 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49, 0x00250E2D, 0x2071B35E,
- 0x226800BB, 0x57B8E0AF, 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,
- 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5, 0x83260376, 0x6295CFA9,
- 0x11C81968, 0x4E734A41, 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,
- 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400, 0x08BA6FB5, 0x571BE91F,
- 0xF296EC6B, 0x2A0DD915, 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,
- 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A,
-};
-
-static const uint32 sbox1[] = {
- 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623, 0xAD6EA6B0, 0x49A7DF7D,
- 0x9CEE60B8, 0x8FEDB266, 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,
- 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E, 0x3F54989A, 0x5B429D65,
- 0x6B8FE4D6, 0x99F73FD6, 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,
- 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E, 0x09686B3F, 0x3EBAEFC9,
- 0x3C971814, 0x6B6A70A1, 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,
- 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8, 0xB03ADA37, 0xF0500C0D,
- 0xF01C1F04, 0x0200B3FF, 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,
- 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701, 0x3AE5E581, 0x37C2DADC,
- 0xC8B57634, 0x9AF3DDA7, 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,
- 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331, 0x4E548B38, 0x4F6DB908,
- 0x6F420D03, 0xF60A04BF, 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,
- 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E, 0x5512721F, 0x2E6B7124,
- 0x501ADDE6, 0x9F84CD87, 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,
- 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2, 0xEF1C1847, 0x3215D908,
- 0xDD433B37, 0x24C2BA16, 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,
- 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B, 0x043556F1, 0xD7A3C76B,
- 0x3C11183B, 0x5924A509, 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,
- 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3, 0x771FE71C, 0x4E3D06FA,
- 0x2965DCB9, 0x99E71D0F, 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,
- 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4, 0xF2F74EA7, 0x361D2B3D,
- 0x1939260F, 0x19C27960, 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,
- 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28, 0xC332DDEF, 0xBE6C5AA5,
- 0x65582185, 0x68AB9802, 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,
- 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510, 0x13CCA830, 0xEB61BD96,
- 0x0334FE1E, 0xAA0363CF, 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,
- 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E, 0x648B1EAF, 0x19BDF0CA,
- 0xA02369B9, 0x655ABB50, 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,
- 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8, 0xF837889A, 0x97E32D77,
- 0x11ED935F, 0x16681281, 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,
- 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696, 0xCDB30AEB, 0x532E3054,
- 0x8FD948E4, 0x6DBC3128, 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,
- 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0, 0x45EEE2B6, 0xA3AAABEA,
- 0xDB6C4F15, 0xFACB4FD0, 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,
- 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250, 0xCF62A1F2, 0x5B8D2646,
- 0xFC8883A0, 0xC1C7B6A3, 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,
- 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00, 0x58428D2A, 0x0C55F5EA,
- 0x1DADF43E, 0x233F7061, 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,
- 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E, 0xA6078084, 0x19F8509E,
- 0xE8EFD855, 0x61D99735, 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,
- 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9, 0xDB73DBD3, 0x105588CD,
- 0x675FDA79, 0xE3674340, 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,
- 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7,
-};
-
-static const uint32 sbox2[] = {
- 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934, 0x411520F7, 0x7602D4F7,
- 0xBCF46B2E, 0xD4A20068, 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,
- 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840, 0x4D95FC1D, 0x96B591AF,
- 0x70F4DDD3, 0x66A02F45, 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,
- 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A, 0x28507825, 0x530429F4,
- 0x0A2C86DA, 0xE9B66DFB, 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,
- 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6, 0xAACE1E7C, 0xD3375FEC,
- 0xCE78A399, 0x406B2A42, 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,
- 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2, 0x3A6EFA74, 0xDD5B4332,
- 0x6841E7F7, 0xCA7820FB, 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,
- 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B, 0x55A867BC, 0xA1159A58,
- 0xCCA92963, 0x99E1DB33, 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,
- 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3, 0x95C11548, 0xE4C66D22,
- 0x48C1133F, 0xC70F86DC, 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,
- 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564, 0x257B7834, 0x602A9C60,
- 0xDFF8E8A3, 0x1F636C1B, 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,
- 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922, 0x85B2A20E, 0xE6BA0D99,
- 0xDE720C8C, 0x2DA2F728, 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,
- 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E, 0x0A476341, 0x992EFF74,
- 0x3A6F6EAB, 0xF4F8FD37, 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,
- 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804, 0xF1290DC7, 0xCC00FFA3,
- 0xB5390F92, 0x690FED0B, 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,
- 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB, 0x37392EB3, 0xCC115979,
- 0x8026E297, 0xF42E312D, 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,
- 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350, 0x1A6B1018, 0x11CAEDFA,
- 0x3D25BDD8, 0xE2E1C3C9, 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,
- 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE, 0x9DBC8057, 0xF0F7C086,
- 0x60787BF8, 0x6003604D, 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,
- 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F, 0x77A057BE, 0xBDE8AE24,
- 0x55464299, 0xBF582E61, 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,
- 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9, 0x7AEB2661, 0x8B1DDF84,
- 0x846A0E79, 0x915F95E2, 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,
- 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E, 0xB77F19B6, 0xE0A9DC09,
- 0x662D09A1, 0xC4324633, 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,
- 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169, 0xDCB7DA83, 0x573906FE,
- 0xA1E2CE9B, 0x4FCD7F52, 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,
- 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5, 0xF0177A28, 0xC0F586E0,
- 0x006058AA, 0x30DC7D62, 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,
- 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76, 0x6F05E409, 0x4B7C0188,
- 0x39720A3D, 0x7C927C24, 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,
- 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4, 0x1E50EF5E, 0xB161E6F8,
- 0xA28514D9, 0x6C51133C, 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,
- 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0,
-};
-
-static const uint32 sbox3[] = {
- 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B, 0x5CB0679E, 0x4FA33742,
- 0xD3822740, 0x99BC9BBE, 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,
- 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4, 0x5748AB2F, 0xBC946E79,
- 0xC6A376D2, 0x6549C2C8, 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,
- 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304, 0xA1FAD5F0, 0x6A2D519A,
- 0x63EF8CE2, 0x9A86EE22, 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,
- 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6, 0x2826A2F9, 0xA73A3AE1,
- 0x4BA99586, 0xEF5562E9, 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,
- 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593, 0xE990FD5A, 0x9E34D797,
- 0x2CF0B7D9, 0x022B8B51, 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,
- 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C, 0xE029AC71, 0xE019A5E6,
- 0x47B0ACFD, 0xED93FA9B, 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,
- 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C, 0x15056DD4, 0x88F46DBA,
- 0x03A16125, 0x0564F0BD, 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,
- 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319, 0x7533D928, 0xB155FDF5,
- 0x03563482, 0x8ABA3CBB, 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,
- 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991, 0xEA7A90C2, 0xFB3E7BCE,
- 0x5121CE64, 0x774FBE32, 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,
- 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166, 0xB39A460A, 0x6445C0DD,
- 0x586CDECF, 0x1C20C8AE, 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,
- 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5, 0x72EACEA8, 0xFA6484BB,
- 0x8D6612AE, 0xBF3C6F47, 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,
- 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D, 0x4040CB08, 0x4EB4E2CC,
- 0x34D2466A, 0x0115AF84, 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,
- 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8, 0x611560B1, 0xE7933FDC,
- 0xBB3A792B, 0x344525BD, 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,
- 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7, 0x1A908749, 0xD44FBD9A,
- 0xD0DADECB, 0xD50ADA38, 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,
- 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C, 0xBF97222C, 0x15E6FC2A,
- 0x0F91FC71, 0x9B941525, 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,
- 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442, 0xE0EC6E0E, 0x1698DB3B,
- 0x4C98A0BE, 0x3278E964, 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,
- 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8, 0xDF359F8D, 0x9B992F2E,
- 0xE60B6F47, 0x0FE3F11D, 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,
- 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299, 0xF523F357, 0xA6327623,
- 0x93A83531, 0x56CCCD02, 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,
- 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614, 0xE6C6C7BD, 0x327A140A,
- 0x45E1D006, 0xC3F27B9A, 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,
- 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B, 0x53113EC0, 0x1640E3D3,
- 0x38ABBD60, 0x2547ADF0, 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,
- 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E, 0x1948C25C, 0x02FB8A8C,
- 0x01C36AE4, 0xD6EBE1F9, 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,
- 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6,
-};
-
-#define Fprime(a,b,c,d) ( ( (S0[a] + S1[b]) ^ S2[c] ) + S3[d] )
-#define F(x) Fprime( ((x>>24)&0xFF), ((x>>16)&0xFF), ((x>>8)&0xFF), (x&0xFF) )
-#define ROUND(n) ( xL ^= P[n], t = xL, xL = F(xL) ^ xR, xR = t )
-
-static void
-blowfish_encrypt(uint32 xL, uint32 xR, uint32 *output,
- BlowfishContext *ctx)
-{
- uint32 *S0 = ctx->S0;
- uint32 *S1 = ctx->S1;
- uint32 *S2 = ctx->S2;
- uint32 *S3 = ctx->S3;
- uint32 *P = ctx->P;
- uint32 t;
-
- ROUND(0);
- ROUND(1);
- ROUND(2);
- ROUND(3);
- ROUND(4);
- ROUND(5);
- ROUND(6);
- ROUND(7);
- ROUND(8);
- ROUND(9);
- ROUND(10);
- ROUND(11);
- ROUND(12);
- ROUND(13);
- ROUND(14);
- ROUND(15);
- xL ^= P[16];
- xR ^= P[17];
-
- output[0] = xR;
- output[1] = xL;
-}
-
-static void
-blowfish_decrypt(uint32 xL, uint32 xR, uint32 *output,
- BlowfishContext *ctx)
-{
- uint32 *S0 = ctx->S0;
- uint32 *S1 = ctx->S1;
- uint32 *S2 = ctx->S2;
- uint32 *S3 = ctx->S3;
- uint32 *P = ctx->P;
- uint32 t;
-
- ROUND(17);
- ROUND(16);
- ROUND(15);
- ROUND(14);
- ROUND(13);
- ROUND(12);
- ROUND(11);
- ROUND(10);
- ROUND(9);
- ROUND(8);
- ROUND(7);
- ROUND(6);
- ROUND(5);
- ROUND(4);
- ROUND(3);
- ROUND(2);
- xL ^= P[1];
- xR ^= P[0];
-
- output[0] = xR;
- output[1] = xL;
-}
-
-void
-blowfish_encrypt_cbc(uint8 *blk, int len, BlowfishContext *ctx)
-{
- uint32 xL,
- xR,
- out[2],
- iv0,
- iv1;
-
- Assert((len & 7) == 0);
-
- iv0 = ctx->iv0;
- iv1 = ctx->iv1;
-
- while (len > 0)
- {
- xL = GET_32BIT_MSB_FIRST(blk);
- xR = GET_32BIT_MSB_FIRST(blk + 4);
- iv0 ^= xL;
- iv1 ^= xR;
- blowfish_encrypt(iv0, iv1, out, ctx);
- iv0 = out[0];
- iv1 = out[1];
- PUT_32BIT_MSB_FIRST(blk, iv0);
- PUT_32BIT_MSB_FIRST(blk + 4, iv1);
- blk += 8;
- len -= 8;
- }
-
- ctx->iv0 = iv0;
- ctx->iv1 = iv1;
-}
-
-void
-blowfish_decrypt_cbc(uint8 *blk, int len, BlowfishContext *ctx)
-{
- uint32 xL,
- xR,
- out[2],
- iv0,
- iv1;
-
- Assert((len & 7) == 0);
-
- iv0 = ctx->iv0;
- iv1 = ctx->iv1;
-
- while (len > 0)
- {
- xL = GET_32BIT_MSB_FIRST(blk);
- xR = GET_32BIT_MSB_FIRST(blk + 4);
- blowfish_decrypt(xL, xR, out, ctx);
- iv0 ^= out[0];
- iv1 ^= out[1];
- PUT_32BIT_MSB_FIRST(blk, iv0);
- PUT_32BIT_MSB_FIRST(blk + 4, iv1);
- iv0 = xL;
- iv1 = xR;
- blk += 8;
- len -= 8;
- }
-
- ctx->iv0 = iv0;
- ctx->iv1 = iv1;
-}
-
-void
-blowfish_encrypt_ecb(uint8 *blk, int len, BlowfishContext *ctx)
-{
- uint32 xL,
- xR,
- out[2];
-
- Assert((len & 7) == 0);
-
- while (len > 0)
- {
- xL = GET_32BIT_MSB_FIRST(blk);
- xR = GET_32BIT_MSB_FIRST(blk + 4);
- blowfish_encrypt(xL, xR, out, ctx);
- PUT_32BIT_MSB_FIRST(blk, out[0]);
- PUT_32BIT_MSB_FIRST(blk + 4, out[1]);
- blk += 8;
- len -= 8;
- }
-}
-
-void
-blowfish_decrypt_ecb(uint8 *blk, int len, BlowfishContext *ctx)
-{
- uint32 xL,
- xR,
- out[2];
-
- Assert((len & 7) == 0);
-
- while (len > 0)
- {
- xL = GET_32BIT_MSB_FIRST(blk);
- xR = GET_32BIT_MSB_FIRST(blk + 4);
- blowfish_decrypt(xL, xR, out, ctx);
- PUT_32BIT_MSB_FIRST(blk, out[0]);
- PUT_32BIT_MSB_FIRST(blk + 4, out[1]);
- blk += 8;
- len -= 8;
- }
-}
-
-void
-blowfish_setkey(BlowfishContext *ctx,
- const uint8 *key, short keybytes)
-{
- uint32 *S0 = ctx->S0;
- uint32 *S1 = ctx->S1;
- uint32 *S2 = ctx->S2;
- uint32 *S3 = ctx->S3;
- uint32 *P = ctx->P;
- uint32 str[2];
- int i;
-
- Assert(keybytes > 0 && keybytes <= (448 / 8));
-
- for (i = 0; i < 18; i++)
- {
- P[i] = parray[i];
- P[i] ^= ((uint32) key[(i * 4 + 0) % keybytes]) << 24;
- P[i] ^= ((uint32) key[(i * 4 + 1) % keybytes]) << 16;
- P[i] ^= ((uint32) key[(i * 4 + 2) % keybytes]) << 8;
- P[i] ^= ((uint32) key[(i * 4 + 3) % keybytes]);
- }
-
- for (i = 0; i < 256; i++)
- {
- S0[i] = sbox0[i];
- S1[i] = sbox1[i];
- S2[i] = sbox2[i];
- S3[i] = sbox3[i];
- }
-
- str[0] = str[1] = 0;
-
- for (i = 0; i < 18; i += 2)
- {
- blowfish_encrypt(str[0], str[1], str, ctx);
- P[i] = str[0];
- P[i + 1] = str[1];
- }
-
- for (i = 0; i < 256; i += 2)
- {
- blowfish_encrypt(str[0], str[1], str, ctx);
- S0[i] = str[0];
- S0[i + 1] = str[1];
- }
- for (i = 0; i < 256; i += 2)
- {
- blowfish_encrypt(str[0], str[1], str, ctx);
- S1[i] = str[0];
- S1[i + 1] = str[1];
- }
- for (i = 0; i < 256; i += 2)
- {
- blowfish_encrypt(str[0], str[1], str, ctx);
- S2[i] = str[0];
- S2[i + 1] = str[1];
- }
- for (i = 0; i < 256; i += 2)
- {
- blowfish_encrypt(str[0], str[1], str, ctx);
- S3[i] = str[0];
- S3[i + 1] = str[1];
- }
-}
-
-void
-blowfish_setiv(BlowfishContext *ctx, const uint8 *iv)
-{
- ctx->iv0 = GET_32BIT_MSB_FIRST(iv);
- ctx->iv1 = GET_32BIT_MSB_FIRST(iv + 4);
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/blf.h
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/blf.h b/contrib/pgcrypto/blf.h
deleted file mode 100644
index 507d7f9..0000000
--- a/contrib/pgcrypto/blf.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/pgcrypto/blf.h,v 1.8 2009/06/11 14:48:52 momjian Exp $ */
-/*
- * PuTTY is copyright 1997-2007 Simon Tatham.
- *
- * Portions copyright Robert de Bath, Joris van Rantwijk, Delian
- * Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas Barry,
- * Justin Bradford, Ben Harris, Malcolm Smith, Ahmad Khalifa, Markus
- * Kuhn, and CORE SDI S.A.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation files
- * (the "Software"), to deal in the Software without restriction,
- * including without limitation the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE
- * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
- * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-typedef struct
-{
- uint32 S0[256],
- S1[256],
- S2[256],
- S3[256],
- P[18];
- uint32 iv0,
- iv1; /* for CBC mode */
-} BlowfishContext;
-
-void blowfish_setkey(BlowfishContext *ctx, const uint8 *key, short keybytes);
-void blowfish_setiv(BlowfishContext *ctx, const uint8 *iv);
-void blowfish_encrypt_cbc(uint8 *blk, int len, BlowfishContext *ctx);
-void blowfish_decrypt_cbc(uint8 *blk, int len, BlowfishContext *ctx);
-void blowfish_encrypt_ecb(uint8 *blk, int len, BlowfishContext *ctx);
-void blowfish_decrypt_ecb(uint8 *blk, int len, BlowfishContext *ctx);
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/crypt-blowfish.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/crypt-blowfish.c b/contrib/pgcrypto/crypt-blowfish.c
deleted file mode 100644
index eebf187..0000000
--- a/contrib/pgcrypto/crypt-blowfish.c
+++ /dev/null
@@ -1,736 +0,0 @@
-/*
- * contrib/pgcrypto/crypt-blowfish.c
- *
- * This code comes from John the Ripper password cracker, with reentrant
- * and crypt(3) interfaces added, but optimizations specific to password
- * cracking removed.
- *
- * Written by Solar Designer <solar at openwall.com> in 1998-2002 and
- * placed in the public domain.
- *
- * There's absolutely no warranty.
- *
- * It is my intent that you should be able to use this on your system,
- * as a part of a software package, or anywhere else to improve security,
- * ensure compatibility, or for any other purpose. I would appreciate
- * it if you give credit where it is due and keep your modifications in
- * the public domain as well, but I don't require that in order to let
- * you place this code and any modifications you make under a license
- * of your choice.
- *
- * This implementation is compatible with OpenBSD bcrypt.c (version 2a)
- * by Niels Provos <provos at citi.umich.edu>, and uses some of his
- * ideas. The password hashing algorithm was designed by David Mazieres
- * <dm at lcs.mit.edu>.
- *
- * There's a paper on the algorithm that explains its design decisions:
- *
- * http://www.usenix.org/events/usenix99/provos.html
- *
- * Some of the tricks in BF_ROUND might be inspired by Eric Young's
- * Blowfish library (I can't be sure if I would think of something if I
- * hadn't seen his code).
- */
-
-#include "postgres.h"
-
-#include "px.h"
-#include "px-crypt.h"
-
-#ifdef __i386__
-#define BF_ASM 0 /* 1 */
-#define BF_SCALE 1
-#elif defined(__x86_64__) || defined(__alpha__) || defined(__hppa__)
-#define BF_ASM 0
-#define BF_SCALE 1
-#else
-#define BF_ASM 0
-#define BF_SCALE 0
-#endif
-
-typedef unsigned int BF_word;
-typedef signed int BF_word_signed;
-
-/* Number of Blowfish rounds, this is also hardcoded into a few places */
-#define BF_N 16
-
-typedef BF_word BF_key[BF_N + 2];
-
-typedef struct
-{
- BF_word S[4][0x100];
- BF_key P;
-} BF_ctx;
-
-/*
- * Magic IV for 64 Blowfish encryptions that we do at the end.
- * The string is "OrpheanBeholderScryDoubt" on big-endian.
- */
-static BF_word BF_magic_w[6] = {
- 0x4F727068, 0x65616E42, 0x65686F6C,
- 0x64657253, 0x63727944, 0x6F756274
-};
-
-/*
- * P-box and S-box tables initialized with digits of Pi.
- */
-static BF_ctx BF_init_state = {
- {
- {
- 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7,
- 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
- 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,
- 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
- 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,
- 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
- 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef,
- 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
- 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,
- 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
- 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce,
- 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
- 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e,
- 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
- 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,
- 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
- 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88,
- 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
- 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e,
- 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
- 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,
- 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,
- 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88,
- 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
- 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,
- 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,
- 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,
- 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
- 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba,
- 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
- 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f,
- 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
- 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,
- 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,
- 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,
- 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
- 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab,
- 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,
- 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,
- 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
- 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0,
- 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
- 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790,
- 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,
- 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,
- 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
- 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7,
- 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
- 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad,
- 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
- 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,
- 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
- 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477,
- 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
- 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,
- 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
- 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,
- 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
- 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41,
- 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
- 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400,
- 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
- 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,
- 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a
- }, {
- 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,
- 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
- 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,
- 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
- 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6,
- 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
- 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e,
- 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
- 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,
- 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,
- 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,
- 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
- 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701,
- 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
- 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,
- 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
- 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf,
- 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
- 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e,
- 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,
- 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,
- 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,
- 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16,
- 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
- 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b,
- 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
- 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,
- 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,
- 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f,
- 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
- 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,
- 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,
- 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,
- 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
- 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802,
- 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
- 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510,
- 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
- 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,
- 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,
- 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,
- 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
- 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8,
- 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,
- 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,
- 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
- 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128,
- 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
- 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0,
- 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,
- 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,
- 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
- 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3,
- 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
- 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00,
- 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
- 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,
- 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
- 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735,
- 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
- 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,
- 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
- 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,
- 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7
- }, {
- 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934,
- 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
- 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,
- 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
- 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45,
- 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
- 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,
- 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
- 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,
- 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
- 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42,
- 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
- 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2,
- 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
- 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,
- 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
- 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,
- 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
- 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3,
- 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
- 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,
- 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
- 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b,
- 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
- 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922,
- 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
- 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,
- 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
- 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37,
- 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
- 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804,
- 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
- 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,
- 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
- 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d,
- 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
- 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,
- 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
- 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,
- 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
- 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d,
- 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
- 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f,
- 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
- 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,
- 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
- 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,
- 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
- 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e,
- 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,
- 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,
- 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
- 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52,
- 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
- 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5,
- 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
- 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,
- 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
- 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24,
- 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
- 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4,
- 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
- 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,
- 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0
- }, {
- 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b,
- 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
- 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,
- 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
- 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8,
- 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
- 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304,
- 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
- 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,
- 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,
- 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9,
- 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
- 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,
- 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
- 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,
- 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,
- 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b,
- 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
- 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c,
- 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,
- 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,
- 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
- 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,
- 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
- 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991,
- 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,
- 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,
- 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
- 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae,
- 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
- 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5,
- 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
- 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,
- 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,
- 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84,
- 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
- 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8,
- 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
- 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,
- 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,
- 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38,
- 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
- 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,
- 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,
- 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,
- 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
- 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964,
- 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
- 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8,
- 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
- 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,
- 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,
- 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,
- 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
- 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614,
- 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,
- 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,
- 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
- 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0,
- 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
- 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e,
- 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
- 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,
- 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
- }
- }, {
- 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,
- 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,
- 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
- 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,
- 0x9216d5d9, 0x8979fb1b
- }
-};
-
-static unsigned char BF_itoa64[64 + 1] =
-"./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
-
-static unsigned char BF_atoi64[0x60] = {
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 1,
- 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 64, 64, 64, 64, 64,
- 64, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 64, 64, 64, 64, 64,
- 64, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 64, 64, 64, 64, 64
-};
-
-#define BF_safe_atoi64(dst, src) \
-do { \
- tmp = (unsigned char)(src); \
- if ((unsigned int)(tmp -= 0x20) >= 0x60) return -1; \
- tmp = BF_atoi64[tmp]; \
- if (tmp > 63) return -1; \
- (dst) = tmp; \
-} while (0)
-
-static int
-BF_decode(BF_word *dst, const char *src, int size)
-{
- unsigned char *dptr = (unsigned char *) dst;
- unsigned char *end = dptr + size;
- unsigned char *sptr = (unsigned char *) src;
- unsigned int tmp,
- c1,
- c2,
- c3,
- c4;
-
- do
- {
- BF_safe_atoi64(c1, *sptr++);
- BF_safe_atoi64(c2, *sptr++);
- *dptr++ = (c1 << 2) | ((c2 & 0x30) >> 4);
- if (dptr >= end)
- break;
-
- BF_safe_atoi64(c3, *sptr++);
- *dptr++ = ((c2 & 0x0F) << 4) | ((c3 & 0x3C) >> 2);
- if (dptr >= end)
- break;
-
- BF_safe_atoi64(c4, *sptr++);
- *dptr++ = ((c3 & 0x03) << 6) | c4;
- } while (dptr < end);
-
- return 0;
-}
-
-static void
-BF_encode(char *dst, const BF_word *src, int size)
-{
- unsigned char *sptr = (unsigned char *) src;
- unsigned char *end = sptr + size;
- unsigned char *dptr = (unsigned char *) dst;
- unsigned int c1,
- c2;
-
- do
- {
- c1 = *sptr++;
- *dptr++ = BF_itoa64[c1 >> 2];
- c1 = (c1 & 0x03) << 4;
- if (sptr >= end)
- {
- *dptr++ = BF_itoa64[c1];
- break;
- }
-
- c2 = *sptr++;
- c1 |= c2 >> 4;
- *dptr++ = BF_itoa64[c1];
- c1 = (c2 & 0x0f) << 2;
- if (sptr >= end)
- {
- *dptr++ = BF_itoa64[c1];
- break;
- }
-
- c2 = *sptr++;
- c1 |= c2 >> 6;
- *dptr++ = BF_itoa64[c1];
- *dptr++ = BF_itoa64[c2 & 0x3f];
- } while (sptr < end);
-}
-
-static void
-BF_swap(BF_word *x, int count)
-{
- /* Swap on little-endian hardware, else do nothing */
-#ifndef WORDS_BIGENDIAN
- BF_word tmp;
-
- do
- {
- tmp = *x;
- tmp = (tmp << 16) | (tmp >> 16);
- *x++ = ((tmp & 0x00FF00FF) << 8) | ((tmp >> 8) & 0x00FF00FF);
- } while (--count);
-#endif
-}
-
-#if BF_SCALE
-/* Architectures which can shift addresses left by 2 bits with no extra cost */
-#define BF_ROUND(L, R, N) \
- tmp1 = (L) & 0xFF; \
- tmp2 = (L) >> 8; \
- tmp2 &= 0xFF; \
- tmp3 = (L) >> 16; \
- tmp3 &= 0xFF; \
- tmp4 = (L) >> 24; \
- tmp1 = data.ctx.S[3][tmp1]; \
- tmp2 = data.ctx.S[2][tmp2]; \
- tmp3 = data.ctx.S[1][tmp3]; \
- tmp3 += data.ctx.S[0][tmp4]; \
- tmp3 ^= tmp2; \
- (R) ^= data.ctx.P[(N) + 1]; \
- tmp3 += tmp1; \
- (R) ^= tmp3;
-#else
-/* Architectures with no complicated addressing modes supported */
-#define BF_INDEX(S, i) \
- (*((BF_word *)(((unsigned char *)(S)) + (i))))
-#define BF_ROUND(L, R, N) \
- tmp1 = (L) & 0xFF; \
- tmp1 <<= 2; \
- tmp2 = (L) >> 6; \
- tmp2 &= 0x3FC; \
- tmp3 = (L) >> 14; \
- tmp3 &= 0x3FC; \
- tmp4 = (L) >> 22; \
- tmp4 &= 0x3FC; \
- tmp1 = BF_INDEX(data.ctx.S[3], tmp1); \
- tmp2 = BF_INDEX(data.ctx.S[2], tmp2); \
- tmp3 = BF_INDEX(data.ctx.S[1], tmp3); \
- tmp3 += BF_INDEX(data.ctx.S[0], tmp4); \
- tmp3 ^= tmp2; \
- (R) ^= data.ctx.P[(N) + 1]; \
- tmp3 += tmp1; \
- (R) ^= tmp3;
-#endif
-
-/*
- * Encrypt one block, BF_N is hardcoded here.
- */
-#define BF_ENCRYPT \
- L ^= data.ctx.P[0]; \
- BF_ROUND(L, R, 0); \
- BF_ROUND(R, L, 1); \
- BF_ROUND(L, R, 2); \
- BF_ROUND(R, L, 3); \
- BF_ROUND(L, R, 4); \
- BF_ROUND(R, L, 5); \
- BF_ROUND(L, R, 6); \
- BF_ROUND(R, L, 7); \
- BF_ROUND(L, R, 8); \
- BF_ROUND(R, L, 9); \
- BF_ROUND(L, R, 10); \
- BF_ROUND(R, L, 11); \
- BF_ROUND(L, R, 12); \
- BF_ROUND(R, L, 13); \
- BF_ROUND(L, R, 14); \
- BF_ROUND(R, L, 15); \
- tmp4 = R; \
- R = L; \
- L = tmp4 ^ data.ctx.P[BF_N + 1];
-
-#if BF_ASM
-
-extern void _BF_body_r(BF_ctx *ctx);
-
-#define BF_body() \
- _BF_body_r(&data.ctx);
-#else
-
-#define BF_body() \
- L = R = 0; \
- ptr = data.ctx.P; \
- do { \
- ptr += 2; \
- BF_ENCRYPT; \
- *(ptr - 2) = L; \
- *(ptr - 1) = R; \
- } while (ptr < &data.ctx.P[BF_N + 2]); \
-\
- ptr = data.ctx.S[0]; \
- do { \
- ptr += 2; \
- BF_ENCRYPT; \
- *(ptr - 2) = L; \
- *(ptr - 1) = R; \
- } while (ptr < &data.ctx.S[3][0xFF]);
-#endif
-
-static void
-BF_set_key(const char *key, BF_key expanded, BF_key initial,
- int sign_extension_bug)
-{
- const char *ptr = key;
- int i,
- j;
- BF_word tmp;
-
- for (i = 0; i < BF_N + 2; i++)
- {
- tmp = 0;
- for (j = 0; j < 4; j++)
- {
- tmp <<= 8;
- if (sign_extension_bug)
- tmp |= (BF_word_signed) (signed char) *ptr;
- else
- tmp |= (unsigned char) *ptr;
-
- if (!*ptr)
- ptr = key;
- else
- ptr++;
- }
-
- expanded[i] = tmp;
- initial[i] = BF_init_state.P[i] ^ tmp;
- }
-}
-
-char *
-_crypt_blowfish_rn(const char *key, const char *setting,
- char *output, int size)
-{
- struct
- {
- BF_ctx ctx;
- BF_key expanded_key;
- union
- {
- BF_word salt[4];
- BF_word output[6];
- } binary;
- } data;
- BF_word L,
- R;
- BF_word tmp1,
- tmp2,
- tmp3,
- tmp4;
- BF_word *ptr;
- BF_word count;
- int i;
-
- if (size < 7 + 22 + 31 + 1)
- return NULL;
-
- if (setting[0] != '$' ||
- setting[1] != '2' ||
- (setting[2] != 'a' && setting[2] != 'x') ||
- setting[3] != '$' ||
- setting[4] < '0' || setting[4] > '3' ||
- setting[5] < '0' || setting[5] > '9' ||
- (setting[4] == '3' && setting[5] > '1') ||
- setting[6] != '$')
- {
- return NULL;
- }
-
- count = (BF_word) 1 << ((setting[4] - '0') * 10 + (setting[5] - '0'));
- if (count < 16 || BF_decode(data.binary.salt, &setting[7], 16))
- {
- memset(data.binary.salt, 0, sizeof(data.binary.salt));
- return NULL;
- }
- BF_swap(data.binary.salt, 4);
-
- BF_set_key(key, data.expanded_key, data.ctx.P, setting[2] == 'x');
-
- memcpy(data.ctx.S, BF_init_state.S, sizeof(data.ctx.S));
-
- L = R = 0;
- for (i = 0; i < BF_N + 2; i += 2)
- {
- L ^= data.binary.salt[i & 2];
- R ^= data.binary.salt[(i & 2) + 1];
- BF_ENCRYPT;
- data.ctx.P[i] = L;
- data.ctx.P[i + 1] = R;
- }
-
- ptr = data.ctx.S[0];
- do
- {
- ptr += 4;
- L ^= data.binary.salt[(BF_N + 2) & 3];
- R ^= data.binary.salt[(BF_N + 3) & 3];
- BF_ENCRYPT;
- *(ptr - 4) = L;
- *(ptr - 3) = R;
-
- L ^= data.binary.salt[(BF_N + 4) & 3];
- R ^= data.binary.salt[(BF_N + 5) & 3];
- BF_ENCRYPT;
- *(ptr - 2) = L;
- *(ptr - 1) = R;
- } while (ptr < &data.ctx.S[3][0xFF]);
-
- do
- {
- data.ctx.P[0] ^= data.expanded_key[0];
- data.ctx.P[1] ^= data.expanded_key[1];
- data.ctx.P[2] ^= data.expanded_key[2];
- data.ctx.P[3] ^= data.expanded_key[3];
- data.ctx.P[4] ^= data.expanded_key[4];
- data.ctx.P[5] ^= data.expanded_key[5];
- data.ctx.P[6] ^= data.expanded_key[6];
- data.ctx.P[7] ^= data.expanded_key[7];
- data.ctx.P[8] ^= data.expanded_key[8];
- data.ctx.P[9] ^= data.expanded_key[9];
- data.ctx.P[10] ^= data.expanded_key[10];
- data.ctx.P[11] ^= data.expanded_key[11];
- data.ctx.P[12] ^= data.expanded_key[12];
- data.ctx.P[13] ^= data.expanded_key[13];
- data.ctx.P[14] ^= data.expanded_key[14];
- data.ctx.P[15] ^= data.expanded_key[15];
- data.ctx.P[16] ^= data.expanded_key[16];
- data.ctx.P[17] ^= data.expanded_key[17];
-
- BF_body();
-
- tmp1 = data.binary.salt[0];
- tmp2 = data.binary.salt[1];
- tmp3 = data.binary.salt[2];
- tmp4 = data.binary.salt[3];
- data.ctx.P[0] ^= tmp1;
- data.ctx.P[1] ^= tmp2;
- data.ctx.P[2] ^= tmp3;
- data.ctx.P[3] ^= tmp4;
- data.ctx.P[4] ^= tmp1;
- data.ctx.P[5] ^= tmp2;
- data.ctx.P[6] ^= tmp3;
- data.ctx.P[7] ^= tmp4;
- data.ctx.P[8] ^= tmp1;
- data.ctx.P[9] ^= tmp2;
- data.ctx.P[10] ^= tmp3;
- data.ctx.P[11] ^= tmp4;
- data.ctx.P[12] ^= tmp1;
- data.ctx.P[13] ^= tmp2;
- data.ctx.P[14] ^= tmp3;
- data.ctx.P[15] ^= tmp4;
- data.ctx.P[16] ^= tmp1;
- data.ctx.P[17] ^= tmp2;
-
- BF_body();
- } while (--count);
-
- for (i = 0; i < 6; i += 2)
- {
- L = BF_magic_w[i];
- R = BF_magic_w[i + 1];
-
- count = 64;
- do
- {
- BF_ENCRYPT;
- } while (--count);
-
- data.binary.output[i] = L;
- data.binary.output[i + 1] = R;
- }
-
- memcpy(output, setting, 7 + 22 - 1);
- output[7 + 22 - 1] = BF_itoa64[(int)
- BF_atoi64[(int) setting[7 + 22 - 1] - 0x20] & 0x30];
-
-/* This has to be bug-compatible with the original implementation, so
- * only encode 23 of the 24 bytes. :-) */
- BF_swap(data.binary.output, 6);
- BF_encode(&output[7 + 22], data.binary.output, 23);
- output[7 + 22 + 31] = '\0';
-
-/* Overwrite the most obvious sensitive data we have on the stack. Note
- * that this does not guarantee there's no sensitive data left on the
- * stack and/or in registers; I'm not aware of portable code that does. */
- memset(&data, 0, sizeof(data));
-
- return output;
-}
[06/11] incubator-hawq git commit: HAWQ-394. Remove pgcrypto from
code base
Posted by hu...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/pgp-armor.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/pgp-armor.c b/contrib/pgcrypto/pgp-armor.c
deleted file mode 100644
index 7963ccc..0000000
--- a/contrib/pgcrypto/pgp-armor.c
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * pgp-armor.c
- * PGP ascii-armor.
- *
- * Copyright (c) 2005 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/pgp-armor.c,v 1.3 2005/10/15 02:49:06 momjian Exp $
- */
-
-#include "postgres.h"
-
-#include "px.h"
-#include "mbuf.h"
-#include "pgp.h"
-
-/*
- * BASE64 - duplicated :(
- */
-
-static const unsigned char _base64[] =
-"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
-static int
-b64_encode(const uint8 *src, unsigned len, uint8 *dst)
-{
- uint8 *p,
- *lend = dst + 76;
- const uint8 *s,
- *end = src + len;
- int pos = 2;
- unsigned long buf = 0;
-
- s = src;
- p = dst;
-
- while (s < end)
- {
- buf |= *s << (pos << 3);
- pos--;
- s++;
-
- /*
- * write it out
- */
- if (pos < 0)
- {
- *p++ = _base64[(buf >> 18) & 0x3f];
- *p++ = _base64[(buf >> 12) & 0x3f];
- *p++ = _base64[(buf >> 6) & 0x3f];
- *p++ = _base64[buf & 0x3f];
-
- pos = 2;
- buf = 0;
- }
- if (p >= lend)
- {
- *p++ = '\n';
- lend = p + 76;
- }
- }
- if (pos != 2)
- {
- *p++ = _base64[(buf >> 18) & 0x3f];
- *p++ = _base64[(buf >> 12) & 0x3f];
- *p++ = (pos == 0) ? _base64[(buf >> 6) & 0x3f] : '=';
- *p++ = '=';
- }
-
- return p - dst;
-}
-
-/* probably should use lookup table */
-static int
-b64_decode(const uint8 *src, unsigned len, uint8 *dst)
-{
- const uint8 *srcend = src + len,
- *s = src;
- uint8 *p = dst;
- char c;
- unsigned b = 0;
- unsigned long buf = 0;
- int pos = 0,
- end = 0;
-
- while (s < srcend)
- {
- c = *s++;
- if (c >= 'A' && c <= 'Z')
- b = c - 'A';
- else if (c >= 'a' && c <= 'z')
- b = c - 'a' + 26;
- else if (c >= '0' && c <= '9')
- b = c - '0' + 52;
- else if (c == '+')
- b = 62;
- else if (c == '/')
- b = 63;
- else if (c == '=')
- {
- /*
- * end sequence
- */
- if (!end)
- {
- if (pos == 2)
- end = 1;
- else if (pos == 3)
- end = 2;
- else
- return PXE_PGP_CORRUPT_ARMOR;
- }
- b = 0;
- }
- else if (c == ' ' || c == '\t' || c == '\n' || c == '\r')
- continue;
- else
- return PXE_PGP_CORRUPT_ARMOR;
-
- /*
- * add it to buffer
- */
- buf = (buf << 6) + b;
- pos++;
- if (pos == 4)
- {
- *p++ = (buf >> 16) & 255;
- if (end == 0 || end > 1)
- *p++ = (buf >> 8) & 255;
- if (end == 0 || end > 2)
- *p++ = buf & 255;
- buf = 0;
- pos = 0;
- }
- }
-
- if (pos != 0)
- return PXE_PGP_CORRUPT_ARMOR;
- return p - dst;
-}
-
-static unsigned
-b64_enc_len(unsigned srclen)
-{
- /*
- * 3 bytes will be converted to 4, linefeed after 76 chars
- */
- return (srclen + 2) * 4 / 3 + srclen / (76 * 3 / 4);
-}
-
-static unsigned
-b64_dec_len(unsigned srclen)
-{
- return (srclen * 3) >> 2;
-}
-
-/*
- * PGP armor
- */
-
-static const char *armor_header = "-----BEGIN PGP MESSAGE-----\n\n";
-static const char *armor_footer = "\n-----END PGP MESSAGE-----\n";
-
-/* CRC24 implementation from rfc2440 */
-#define CRC24_INIT 0x00b704ceL
-#define CRC24_POLY 0x01864cfbL
-static long
-crc24(const uint8 *data, unsigned len)
-{
- unsigned crc = CRC24_INIT;
- int i;
-
- while (len--)
- {
- crc ^= (*data++) << 16;
- for (i = 0; i < 8; i++)
- {
- crc <<= 1;
- if (crc & 0x1000000)
- crc ^= CRC24_POLY;
- }
- }
- return crc & 0xffffffL;
-}
-
-int
-pgp_armor_encode(const uint8 *src, unsigned len, uint8 *dst)
-{
- int n;
- uint8 *pos = dst;
- unsigned crc = crc24(src, len);
-
- n = strlen(armor_header);
- memcpy(pos, armor_header, n);
- pos += n;
-
- n = b64_encode(src, len, pos);
- pos += n;
-
- if (*(pos - 1) != '\n')
- *pos++ = '\n';
-
- *pos++ = '=';
- pos[3] = _base64[crc & 0x3f];
- crc >>= 6;
- pos[2] = _base64[crc & 0x3f];
- crc >>= 6;
- pos[1] = _base64[crc & 0x3f];
- crc >>= 6;
- pos[0] = _base64[crc & 0x3f];
- pos += 4;
-
- n = strlen(armor_footer);
- memcpy(pos, armor_footer, n);
- pos += n;
-
- return pos - dst;
-}
-
-static const uint8 *
-find_str(const uint8 *data, const uint8 *data_end, const char *str, int strlen)
-{
- const uint8 *p = data;
-
- if (!strlen)
- return NULL;
- if (data_end - data < strlen)
- return NULL;
- while (p < data_end)
- {
- p = memchr(p, str[0], data_end - p);
- if (p == NULL)
- return NULL;
- if (p + strlen > data_end)
- return NULL;
- if (memcmp(p, str, strlen) == 0)
- return p;
- p++;
- }
- return NULL;
-}
-
-static int
-find_header(const uint8 *data, const uint8 *datend,
- const uint8 **start_p, int is_end)
-{
- const uint8 *p = data;
- static const char *start_sep = "-----BEGIN";
- static const char *end_sep = "-----END";
- const char *sep = is_end ? end_sep : start_sep;
-
- /* find header line */
- while (1)
- {
- p = find_str(p, datend, sep, strlen(sep));
- if (p == NULL)
- return PXE_PGP_CORRUPT_ARMOR;
- /* it must start at beginning of line */
- if (p == data || *(p - 1) == '\n')
- break;
- p += strlen(sep);
- }
- *start_p = p;
- p += strlen(sep);
-
- /* check if header text ok */
- for (; p < datend && *p != '-'; p++)
- {
- /* various junk can be there, but definitely not line-feed */
- if (*p >= ' ')
- continue;
- return PXE_PGP_CORRUPT_ARMOR;
- }
- if (datend - p < 5 || memcmp(p, sep, 5) != 0)
- return PXE_PGP_CORRUPT_ARMOR;
- p += 5;
-
- /* check if at end of line */
- if (p < datend)
- {
- if (*p != '\n' && *p != '\r')
- return PXE_PGP_CORRUPT_ARMOR;
- if (*p == '\r')
- p++;
- if (p < datend && *p == '\n')
- p++;
- }
- return p - *start_p;
-}
-
-int
-pgp_armor_decode(const uint8 *src, unsigned len, uint8 *dst)
-{
- const uint8 *p = src;
- const uint8 *data_end = src + len;
- long crc;
- const uint8 *base64_start,
- *armor_end;
- const uint8 *base64_end = NULL;
- uint8 buf[4];
- int hlen;
- int res = PXE_PGP_CORRUPT_ARMOR;
-
- /* armor start */
- hlen = find_header(src, data_end, &p, 0);
- if (hlen <= 0)
- goto out;
- p += hlen;
-
- /* armor end */
- hlen = find_header(p, data_end, &armor_end, 1);
- if (hlen <= 0)
- goto out;
-
- /* skip comments - find empty line */
- while (p < armor_end && *p != '\n' && *p != '\r')
- {
- p = memchr(p, '\n', armor_end - p);
- if (!p)
- goto out;
-
- /* step to start of next line */
- p++;
- }
- base64_start = p;
-
- /* find crc pos */
- for (p = armor_end; p >= base64_start; p--)
- if (*p == '=')
- {
- base64_end = p - 1;
- break;
- }
- if (base64_end == NULL)
- goto out;
-
- /* decode crc */
- if (b64_decode(p + 1, 4, buf) != 3)
- goto out;
- crc = (((long) buf[0]) << 16) + (((long) buf[1]) << 8) + (long) buf[2];
-
- /* decode data */
- res = b64_decode(base64_start, base64_end - base64_start, dst);
-
- /* check crc */
- if (res >= 0 && crc24(dst, res) != crc)
- res = PXE_PGP_CORRUPT_ARMOR;
-out:
- return res;
-}
-
-unsigned
-pgp_armor_enc_len(unsigned len)
-{
- return b64_enc_len(len) + strlen(armor_header) + strlen(armor_footer) + 16;
-}
-
-unsigned
-pgp_armor_dec_len(unsigned len)
-{
- return b64_dec_len(len);
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/pgp-cfb.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/pgp-cfb.c b/contrib/pgcrypto/pgp-cfb.c
deleted file mode 100644
index bd05ccc..0000000
--- a/contrib/pgcrypto/pgp-cfb.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * pgp-cfb.c
- * Implements both normal and PGP-specific CFB mode.
- *
- * Copyright (c) 2005 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/pgp-cfb.c,v 1.4 2009/06/11 14:48:52 momjian Exp $
- */
-
-#include "postgres.h"
-
-#include "mbuf.h"
-#include "px.h"
-#include "pgp.h"
-
-typedef int (*mix_data_t) (PGP_CFB *ctx, const uint8 *data, int len, uint8 *dst);
-
-struct PGP_CFB
-{
- PX_Cipher *ciph;
- int block_size;
- int pos;
- int block_no;
- int resync;
- uint8 fr[PGP_MAX_BLOCK];
- uint8 fre[PGP_MAX_BLOCK];
- uint8 encbuf[PGP_MAX_BLOCK];
-};
-
-int
-pgp_cfb_create(PGP_CFB **ctx_p, int algo, const uint8 *key, int key_len,
- int resync, uint8 *iv)
-{
- int res;
- PX_Cipher *ciph;
- PGP_CFB *ctx;
-
- res = pgp_load_cipher(algo, &ciph);
- if (res < 0)
- return res;
-
- res = px_cipher_init(ciph, key, key_len, NULL);
- if (res < 0)
- {
- px_cipher_free(ciph);
- return res;
- }
-
- ctx = px_alloc(sizeof(*ctx));
- memset(ctx, 0, sizeof(*ctx));
- ctx->ciph = ciph;
- ctx->block_size = px_cipher_block_size(ciph);
- ctx->resync = resync;
-
- if (iv)
- memcpy(ctx->fr, iv, ctx->block_size);
-
- *ctx_p = ctx;
- return 0;
-}
-
-void
-pgp_cfb_free(PGP_CFB *ctx)
-{
- px_cipher_free(ctx->ciph);
- memset(ctx, 0, sizeof(*ctx));
- px_free(ctx);
-}
-
-/*
- * Data processing for normal CFB. (PGP_PKT_SYMENCRYPTED_DATA_MDC)
- */
-static int
-mix_encrypt_normal(PGP_CFB *ctx, const uint8 *data, int len, uint8 *dst)
-{
- int i;
-
- for (i = ctx->pos; i < ctx->pos + len; i++)
- *dst++ = ctx->encbuf[i] = ctx->fre[i] ^ (*data++);
- ctx->pos += len;
- return len;
-}
-
-static int
-mix_decrypt_normal(PGP_CFB *ctx, const uint8 *data, int len, uint8 *dst)
-{
- int i;
-
- for (i = ctx->pos; i < ctx->pos + len; i++)
- {
- ctx->encbuf[i] = *data++;
- *dst++ = ctx->fre[i] ^ ctx->encbuf[i];
- }
- ctx->pos += len;
- return len;
-}
-
-/*
- * Data processing for old PGP CFB mode. (PGP_PKT_SYMENCRYPTED_DATA)
- *
- * The goal is to hide the horror from the rest of the code,
- * thus its all concentrated here.
- */
-static int
-mix_encrypt_resync(PGP_CFB *ctx, const uint8 *data, int len, uint8 *dst)
-{
- int i,
- n;
-
- /* block #2 is 2 bytes long */
- if (ctx->block_no == 2)
- {
- n = 2 - ctx->pos;
- if (len < n)
- n = len;
- for (i = ctx->pos; i < ctx->pos + n; i++)
- *dst++ = ctx->encbuf[i] = ctx->fre[i] ^ (*data++);
-
- ctx->pos += n;
- len -= n;
-
- if (ctx->pos == 2)
- {
- memcpy(ctx->fr, ctx->encbuf + 2, ctx->block_size - 2);
- memcpy(ctx->fr + ctx->block_size - 2, ctx->encbuf, 2);
- ctx->pos = 0;
- return n;
- }
- }
- for (i = ctx->pos; i < ctx->pos + len; i++)
- *dst++ = ctx->encbuf[i] = ctx->fre[i] ^ (*data++);
- ctx->pos += len;
- return len;
-}
-
-static int
-mix_decrypt_resync(PGP_CFB *ctx, const uint8 *data, int len, uint8 *dst)
-{
- int i,
- n;
-
- /* block #2 is 2 bytes long */
- if (ctx->block_no == 2)
- {
- n = 2 - ctx->pos;
- if (len < n)
- n = len;
- for (i = ctx->pos; i < ctx->pos + n; i++)
- {
- ctx->encbuf[i] = *data++;
- *dst++ = ctx->fre[i] ^ ctx->encbuf[i];
- }
- ctx->pos += n;
- len -= n;
-
- if (ctx->pos == 2)
- {
- memcpy(ctx->fr, ctx->encbuf + 2, ctx->block_size - 2);
- memcpy(ctx->fr + ctx->block_size - 2, ctx->encbuf, 2);
- ctx->pos = 0;
- return n;
- }
- }
- for (i = ctx->pos; i < ctx->pos + len; i++)
- {
- ctx->encbuf[i] = *data++;
- *dst++ = ctx->fre[i] ^ ctx->encbuf[i];
- }
- ctx->pos += len;
- return len;
-}
-
-/*
- * common code for both encrypt and decrypt.
- */
-static int
-cfb_process(PGP_CFB *ctx, const uint8 *data, int len, uint8 *dst,
- mix_data_t mix_data)
-{
- int n;
- int res;
-
- while (len > 0 && ctx->pos > 0)
- {
- n = ctx->block_size - ctx->pos;
- if (len < n)
- n = len;
-
- n = mix_data(ctx, data, n, dst);
- data += n;
- dst += n;
- len -= n;
-
- if (ctx->pos == ctx->block_size)
- {
- memcpy(ctx->fr, ctx->encbuf, ctx->block_size);
- ctx->pos = 0;
- }
- }
-
- while (len > 0)
- {
- px_cipher_encrypt(ctx->ciph, ctx->fr, ctx->block_size, ctx->fre);
- if (ctx->block_no < 5)
- ctx->block_no++;
-
- n = ctx->block_size;
- if (len < n)
- n = len;
-
- res = mix_data(ctx, data, n, dst);
- data += res;
- dst += res;
- len -= res;
-
- if (ctx->pos == ctx->block_size)
- {
- memcpy(ctx->fr, ctx->encbuf, ctx->block_size);
- ctx->pos = 0;
- }
- }
- return 0;
-}
-
-/*
- * public interface
- */
-
-int
-pgp_cfb_encrypt(PGP_CFB *ctx, const uint8 *data, int len, uint8 *dst)
-{
- mix_data_t mix = ctx->resync ? mix_encrypt_resync : mix_encrypt_normal;
-
- return cfb_process(ctx, data, len, dst, mix);
-}
-
-int
-pgp_cfb_decrypt(PGP_CFB *ctx, const uint8 *data, int len, uint8 *dst)
-{
- mix_data_t mix = ctx->resync ? mix_decrypt_resync : mix_decrypt_normal;
-
- return cfb_process(ctx, data, len, dst, mix);
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/pgp-compress.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/pgp-compress.c b/contrib/pgcrypto/pgp-compress.c
deleted file mode 100644
index 41f5855..0000000
--- a/contrib/pgcrypto/pgp-compress.c
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
- * pgp-compress.c
- * ZIP and ZLIB compression via zlib.
- *
- * Copyright (c) 2005 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/pgp-compress.c,v 1.8 2009/06/11 14:48:52 momjian Exp $
- */
-
-#include "postgres.h"
-
-#include "mbuf.h"
-#include "px.h"
-#include "pgp.h"
-
-
-/*
- * Compressed pkt writer
- */
-
-#ifdef HAVE_LIBZ
-
-#include <zlib.h>
-
-#define ZIP_OUT_BUF 8192
-#define ZIP_IN_BLOCK 8192
-
-struct ZipStat
-{
- uint8 type;
- int buf_len;
- int hdr_done;
- z_stream stream;
- uint8 buf[ZIP_OUT_BUF];
-};
-
-static void *
-z_alloc(void *priv, unsigned n_items, unsigned item_len)
-{
- return px_alloc(n_items * item_len);
-}
-
-static void
-z_free(void *priv, void *addr)
-{
- px_free(addr);
-}
-
-static int
-compress_init(PushFilter *next, void *init_arg, void **priv_p)
-{
- int res;
- struct ZipStat *st;
- PGP_Context *ctx = init_arg;
- uint8 type = ctx->compress_algo;
-
- if (type != PGP_COMPR_ZLIB && type != PGP_COMPR_ZIP)
- return PXE_PGP_UNSUPPORTED_COMPR;
-
- /*
- * init
- */
- st = px_alloc(sizeof(*st));
- memset(st, 0, sizeof(*st));
- st->buf_len = ZIP_OUT_BUF;
- st->stream.zalloc = z_alloc;
- st->stream.zfree = z_free;
-
- if (type == PGP_COMPR_ZIP)
- res = deflateInit2(&st->stream, ctx->compress_level,
- Z_DEFLATED, -15, 8, Z_DEFAULT_STRATEGY);
- else
- res = deflateInit(&st->stream, ctx->compress_level);
- if (res != Z_OK)
- {
- px_free(st);
- return PXE_PGP_COMPRESSION_ERROR;
- }
- *priv_p = st;
-
- return ZIP_IN_BLOCK;
-}
-
-/* writes compressed data packet */
-
-/* cant handle zero-len incoming data, but shouldnt */
-static int
-compress_process(PushFilter *next, void *priv, const uint8 *data, int len)
-{
- int res,
- n_out;
- struct ZipStat *st = priv;
-
- /*
- * process data
- */
- while (len > 0)
- {
- st->stream.next_in = (void *) data;
- st->stream.avail_in = len;
- st->stream.next_out = st->buf;
- st->stream.avail_out = st->buf_len;
- res = deflate(&st->stream, 0);
- if (res != Z_OK)
- return PXE_PGP_COMPRESSION_ERROR;
-
- n_out = st->buf_len - st->stream.avail_out;
- if (n_out > 0)
- {
- res = pushf_write(next, st->buf, n_out);
- if (res < 0)
- return res;
- }
- len = st->stream.avail_in;
- }
-
- return 0;
-}
-
-static int
-compress_flush(PushFilter *next, void *priv)
-{
- int res,
- zres,
- n_out;
- struct ZipStat *st = priv;
-
- st->stream.next_in = NULL;
- st->stream.avail_in = 0;
- while (1)
- {
- st->stream.next_out = st->buf;
- st->stream.avail_out = st->buf_len;
- zres = deflate(&st->stream, Z_FINISH);
- if (zres != Z_STREAM_END && zres != Z_OK)
- return PXE_PGP_COMPRESSION_ERROR;
- n_out = st->buf_len - st->stream.avail_out;
- if (n_out > 0)
- {
- res = pushf_write(next, st->buf, n_out);
- if (res < 0)
- return res;
- }
- if (zres == Z_STREAM_END)
- break;
- }
- return 0;
-}
-
-static void
-compress_free(void *priv)
-{
- struct ZipStat *st = priv;
-
- deflateEnd(&st->stream);
- memset(st, 0, sizeof(*st));
- px_free(st);
-}
-
-static const PushFilterOps
- compress_filter = {
- compress_init, compress_process, compress_flush, compress_free
-};
-
-int
-pgp_compress_filter(PushFilter **res, PGP_Context *ctx, PushFilter *dst)
-{
- return pushf_create(res, &compress_filter, ctx, dst);
-}
-
-/*
- * Decompress
- */
-struct DecomprData
-{
- int buf_len; /* = ZIP_OUT_BUF */
- int buf_data; /* available data */
- uint8 *pos;
- z_stream stream;
- int eof;
- uint8 buf[ZIP_OUT_BUF];
-};
-
-static int
-decompress_init(void **priv_p, void *arg, PullFilter *src)
-{
- PGP_Context *ctx = arg;
- struct DecomprData *dec;
- int res;
-
- if (ctx->compress_algo != PGP_COMPR_ZLIB
- && ctx->compress_algo != PGP_COMPR_ZIP)
- return PXE_PGP_UNSUPPORTED_COMPR;
-
- dec = px_alloc(sizeof(*dec));
- memset(dec, 0, sizeof(*dec));
- dec->buf_len = ZIP_OUT_BUF;
- *priv_p = dec;
-
- dec->stream.zalloc = z_alloc;
- dec->stream.zfree = z_free;
-
- if (ctx->compress_algo == PGP_COMPR_ZIP)
- res = inflateInit2(&dec->stream, -15);
- else
- res = inflateInit(&dec->stream);
- if (res != Z_OK)
- {
- px_free(dec);
- px_debug("decompress_init: inflateInit error");
- return PXE_PGP_COMPRESSION_ERROR;
- }
-
- return 0;
-}
-
-static int
-decompress_read(void *priv, PullFilter *src, int len,
- uint8 **data_p, uint8 *buf, int buflen)
-{
- int res;
- int flush;
- struct DecomprData *dec = priv;
-
-restart:
- if (dec->buf_data > 0)
- {
- if (len > dec->buf_data)
- len = dec->buf_data;
- *data_p = dec->pos;
- dec->pos += len;
- dec->buf_data -= len;
- return len;
- }
-
- if (dec->eof)
- return 0;
-
- if (dec->stream.avail_in == 0)
- {
- uint8 *tmp;
-
- res = pullf_read(src, 8192, &tmp);
- if (res < 0)
- return res;
- dec->stream.next_in = tmp;
- dec->stream.avail_in = res;
- }
-
- dec->stream.next_out = dec->buf;
- dec->stream.avail_out = dec->buf_len;
- dec->pos = dec->buf;
-
- /*
- * Z_SYNC_FLUSH is tell zlib to output as much as possible. It should do
- * it anyway (Z_NO_FLUSH), but seems to reserve the right not to. So lets
- * follow the API.
- */
- flush = dec->stream.avail_in ? Z_SYNC_FLUSH : Z_FINISH;
- res = inflate(&dec->stream, flush);
- if (res != Z_OK && res != Z_STREAM_END)
- {
- px_debug("decompress_read: inflate error: %d", res);
- return PXE_PGP_CORRUPT_DATA;
- }
-
- dec->buf_data = dec->buf_len - dec->stream.avail_out;
- if (res == Z_STREAM_END)
- dec->eof = 1;
- goto restart;
-}
-
-static void
-decompress_free(void *priv)
-{
- struct DecomprData *dec = priv;
-
- inflateEnd(&dec->stream);
- memset(dec, 0, sizeof(*dec));
- px_free(dec);
-}
-
-static const PullFilterOps
- decompress_filter = {
- decompress_init, decompress_read, decompress_free
-};
-
-int
-pgp_decompress_filter(PullFilter **res, PGP_Context *ctx, PullFilter *src)
-{
- return pullf_create(res, &decompress_filter, ctx, src);
-}
-#else /* !HAVE_ZLIB */
-
-int
-pgp_compress_filter(PushFilter **res, PGP_Context *ctx, PushFilter *dst)
-{
- return PXE_PGP_UNSUPPORTED_COMPR;
-}
-
-int
-pgp_decompress_filter(PullFilter **res, PGP_Context *ctx, PullFilter *src)
-{
- return PXE_PGP_UNSUPPORTED_COMPR;
-}
-
-#endif
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/pgp-decrypt.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/pgp-decrypt.c b/contrib/pgcrypto/pgp-decrypt.c
deleted file mode 100644
index 8888dc9..0000000
--- a/contrib/pgcrypto/pgp-decrypt.c
+++ /dev/null
@@ -1,1188 +0,0 @@
-/*
- * pgp-decrypt.c
- * OpenPGP decrypt.
- *
- * Copyright (c) 2005 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/pgp-decrypt.c,v 1.8 2009/06/11 14:48:52 momjian Exp $
- */
-
-#include "postgres.h"
-
-#include "px.h"
-#include "mbuf.h"
-#include "pgp.h"
-
-#define NO_CTX_SIZE 0
-#define ALLOW_CTX_SIZE 1
-#define NO_COMPR 0
-#define ALLOW_COMPR 1
-#define NO_MDC 0
-#define NEED_MDC 1
-
-#define PKT_NORMAL 1
-#define PKT_STREAM 2
-#define PKT_CONTEXT 3
-
-#define MAX_CHUNK (16*1024*1024)
-
-static int
-parse_new_len(PullFilter *src, int *len_p)
-{
- uint8 b;
- int len;
- int pkttype = PKT_NORMAL;
-
- GETBYTE(src, b);
- if (b <= 191)
- len = b;
- else if (b >= 192 && b <= 223)
- {
- len = ((unsigned) (b) - 192) << 8;
- GETBYTE(src, b);
- len += 192 + b;
- }
- else if (b == 255)
- {
- GETBYTE(src, b);
- len = b;
- GETBYTE(src, b);
- len = (len << 8) | b;
- GETBYTE(src, b);
- len = (len << 8) | b;
- GETBYTE(src, b);
- len = (len << 8) | b;
- }
- else
- {
- len = 1 << (b & 0x1F);
- pkttype = PKT_STREAM;
- }
-
- if (len < 0 || len > MAX_CHUNK)
- {
- px_debug("parse_new_len: weird length");
- return PXE_PGP_CORRUPT_DATA;
- }
-
- *len_p = len;
- return pkttype;
-}
-
-static int
-parse_old_len(PullFilter *src, int *len_p, int lentype)
-{
- uint8 b;
- int len;
-
- GETBYTE(src, b);
- len = b;
-
- if (lentype == 1)
- {
- GETBYTE(src, b);
- len = (len << 8) | b;
- }
- else if (lentype == 2)
- {
- GETBYTE(src, b);
- len = (len << 8) | b;
- GETBYTE(src, b);
- len = (len << 8) | b;
- GETBYTE(src, b);
- len = (len << 8) | b;
- }
-
- if (len < 0 || len > MAX_CHUNK)
- {
- px_debug("parse_old_len: weird length");
- return PXE_PGP_CORRUPT_DATA;
- }
- *len_p = len;
- return PKT_NORMAL;
-}
-
-/* returns pkttype or 0 on eof */
-int
-pgp_parse_pkt_hdr(PullFilter *src, uint8 *tag, int *len_p, int allow_ctx)
-{
- int lentype;
- int res;
- uint8 *p;
-
- /* EOF is normal here, thus we dont use GETBYTE */
- res = pullf_read(src, 1, &p);
- if (res < 0)
- return res;
- if (res == 0)
- return 0;
-
- if ((*p & 0x80) == 0)
- {
- px_debug("pgp_parse_pkt_hdr: not pkt hdr");
- return PXE_PGP_CORRUPT_DATA;
- }
-
- if (*p & 0x40)
- {
- *tag = *p & 0x3f;
- res = parse_new_len(src, len_p);
- }
- else
- {
- lentype = *p & 3;
- *tag = (*p >> 2) & 0x0F;
- if (lentype == 3)
- res = allow_ctx ? PKT_CONTEXT : PXE_PGP_CORRUPT_DATA;
- else
- res = parse_old_len(src, len_p, lentype);
- }
- return res;
-}
-
-/*
- * Packet reader
- */
-struct PktData
-{
- int type;
- int len;
-};
-
-static int
-pktreader_pull(void *priv, PullFilter *src, int len,
- uint8 **data_p, uint8 *buf, int buflen)
-{
- int res;
- struct PktData *pkt = priv;
-
- /* PKT_CONTEXT means: whatever there is */
- if (pkt->type == PKT_CONTEXT)
- return pullf_read(src, len, data_p);
-
- if (pkt->len == 0)
- {
- /* this was last chunk in stream */
- if (pkt->type == PKT_NORMAL)
- return 0;
-
- /* next chunk in stream */
- res = parse_new_len(src, &pkt->len);
- if (res < 0)
- return res;
- pkt->type = res;
- }
-
- if (len > pkt->len)
- len = pkt->len;
-
- res = pullf_read(src, len, data_p);
- if (res > 0)
- pkt->len -= res;
-
- return res;
-}
-
-static void
-pktreader_free(void *priv)
-{
- struct PktData *pkt = priv;
-
- memset(pkt, 0, sizeof(*pkt));
- px_free(pkt);
-}
-
-static struct PullFilterOps pktreader_filter = {
- NULL, pktreader_pull, pktreader_free
-};
-
-/* needs helper function to pass several parameters */
-int
-pgp_create_pkt_reader(PullFilter **pf_p, PullFilter *src, int len,
- int pkttype, PGP_Context *ctx)
-{
- int res;
- struct PktData *pkt = px_alloc(sizeof(*pkt));
-
- pkt->type = pkttype;
- pkt->len = len;
- res = pullf_create(pf_p, &pktreader_filter, pkt, src);
- if (res < 0)
- px_free(pkt);
- return res;
-}
-
-/*
- * Prefix check filter
- */
-
-static int
-prefix_init(void **priv_p, void *arg, PullFilter *src)
-{
- PGP_Context *ctx = arg;
- int len;
- int res;
- uint8 *buf;
- uint8 tmpbuf[PGP_MAX_BLOCK + 2];
-
- len = pgp_get_cipher_block_size(ctx->cipher_algo);
- if (len > sizeof(tmpbuf))
- return PXE_BUG;
-
- res = pullf_read_max(src, len + 2, &buf, tmpbuf);
- if (res < 0)
- return res;
- if (res != len + 2)
- {
- px_debug("prefix_init: short read");
- memset(tmpbuf, 0, sizeof(tmpbuf));
- return PXE_PGP_CORRUPT_DATA;
- }
-
- if (buf[len - 2] != buf[len] || buf[len - 1] != buf[len + 1])
- {
- px_debug("prefix_init: corrupt prefix");
-
- /*
- * The original purpose of the 2-byte check was to show user a
- * friendly "wrong key" message. This made following possible:
- *
- * "An Attack on CFB Mode Encryption As Used By OpenPGP" by Serge
- * Mister and Robert Zuccherato
- *
- * To avoid being 'oracle', we delay reporting, which basically means
- * we prefer to run into corrupt packet header.
- *
- * We _could_ throw PXE_PGP_CORRUPT_DATA here, but there is
- * possibility of attack via timing, so we don't.
- */
- ctx->corrupt_prefix = 1;
- }
- memset(tmpbuf, 0, sizeof(tmpbuf));
- return 0;
-}
-
-static struct PullFilterOps prefix_filter = {
- prefix_init, NULL, NULL
-};
-
-
-/*
- * Decrypt filter
- */
-
-static int
-decrypt_init(void **priv_p, void *arg, PullFilter *src)
-{
- PGP_CFB *cfb = arg;
-
- *priv_p = cfb;
-
- /* we need to write somewhere, so ask for a buffer */
- return 4096;
-}
-
-static int
-decrypt_read(void *priv, PullFilter *src, int len,
- uint8 **data_p, uint8 *buf, int buflen)
-{
- PGP_CFB *cfb = priv;
- uint8 *tmp;
- int res;
-
- res = pullf_read(src, len, &tmp);
- if (res > 0)
- {
- pgp_cfb_decrypt(cfb, tmp, res, buf);
- *data_p = buf;
- }
- return res;
-}
-
-struct PullFilterOps pgp_decrypt_filter = {
- decrypt_init, decrypt_read, NULL
-};
-
-
-/*
- * MDC hasher filter
- */
-
-static int
-mdc_init(void **priv_p, void *arg, PullFilter *src)
-{
- PGP_Context *ctx = arg;
-
- *priv_p = ctx;
- return pgp_load_digest(PGP_DIGEST_SHA1, &ctx->mdc_ctx);
-}
-
-static void
-mdc_free(void *priv)
-{
- PGP_Context *ctx = priv;
-
- if (ctx->use_mdcbuf_filter)
- return;
- px_md_free(ctx->mdc_ctx);
- ctx->mdc_ctx = NULL;
-}
-
-static int
-mdc_finish(PGP_Context *ctx, PullFilter *src,
- int len, uint8 **data_p)
-{
- int res;
- uint8 hash[20];
- uint8 tmpbuf[22];
-
- if (len + 1 > sizeof(tmpbuf))
- return PXE_BUG;
-
- /* read data */
- res = pullf_read_max(src, len + 1, data_p, tmpbuf);
- if (res < 0)
- return res;
- if (res == 0)
- {
- if (ctx->mdc_checked == 0)
- {
- px_debug("no mdc");
- return PXE_PGP_CORRUPT_DATA;
- }
- return 0;
- }
-
- /* safety check */
- if (ctx->in_mdc_pkt > 1)
- {
- px_debug("mdc_finish: several times here?");
- return PXE_PGP_CORRUPT_DATA;
- }
- ctx->in_mdc_pkt++;
-
- /* is the packet sane? */
- if (res != 20)
- {
- px_debug("mdc_finish: read failed, res=%d", res);
- return PXE_PGP_CORRUPT_DATA;
- }
-
- /*
- * ok, we got the hash, now check
- */
- px_md_finish(ctx->mdc_ctx, hash);
- res = memcmp(hash, *data_p, 20);
- memset(hash, 0, 20);
- memset(tmpbuf, 0, sizeof(tmpbuf));
- if (res != 0)
- {
- px_debug("mdc_finish: mdc failed");
- return PXE_PGP_CORRUPT_DATA;
- }
- ctx->mdc_checked = 1;
- return len;
-}
-
-static int
-mdc_read(void *priv, PullFilter *src, int len,
- uint8 **data_p, uint8 *buf, int buflen)
-{
- int res;
- PGP_Context *ctx = priv;
-
- /* skip this filter? */
- if (ctx->use_mdcbuf_filter)
- return pullf_read(src, len, data_p);
-
- if (ctx->in_mdc_pkt)
- return mdc_finish(ctx, src, len, data_p);
-
- res = pullf_read(src, len, data_p);
- if (res < 0)
- return res;
- if (res == 0)
- {
- px_debug("mdc_read: unexpected eof");
- return PXE_PGP_CORRUPT_DATA;
- }
- px_md_update(ctx->mdc_ctx, *data_p, res);
-
- return res;
-}
-
-static struct PullFilterOps mdc_filter = {
- mdc_init, mdc_read, mdc_free
-};
-
-
-/*
- * Combined Pkt reader and MDC hasher.
- *
- * For the case of SYMENCRYPTED_MDC packet, where
- * the data part has 'context length', which means
- * that data packet ends 22 bytes before end of parent
- * packet, which is silly.
- */
-#define MDCBUF_LEN 8192
-struct MDCBufData
-{
- PGP_Context *ctx;
- int eof;
- int buflen;
- int avail;
- uint8 *pos;
- int mdc_avail;
- uint8 mdc_buf[22];
- uint8 buf[MDCBUF_LEN];
-};
-
-static int
-mdcbuf_init(void **priv_p, void *arg, PullFilter *src)
-{
- PGP_Context *ctx = arg;
- struct MDCBufData *st;
-
- st = px_alloc(sizeof(*st));
- memset(st, 0, sizeof(*st));
- st->buflen = sizeof(st->buf);
- st->ctx = ctx;
- *priv_p = st;
-
- /* take over the work of mdc_filter */
- ctx->use_mdcbuf_filter = 1;
-
- return 0;
-}
-
-static int
-mdcbuf_finish(struct MDCBufData * st)
-{
- uint8 hash[20];
- int res;
-
- st->eof = 1;
-
- if (st->mdc_buf[0] != 0xD3 || st->mdc_buf[1] != 0x14)
- {
- px_debug("mdcbuf_finish: bad MDC pkt hdr");
- return PXE_PGP_CORRUPT_DATA;
- }
- px_md_update(st->ctx->mdc_ctx, st->mdc_buf, 2);
- px_md_finish(st->ctx->mdc_ctx, hash);
- res = memcmp(hash, st->mdc_buf + 2, 20);
- memset(hash, 0, 20);
- if (res)
- {
- px_debug("mdcbuf_finish: MDC does not match");
- res = PXE_PGP_CORRUPT_DATA;
- }
- return res;
-}
-
-static void
-mdcbuf_load_data(struct MDCBufData * st, uint8 *src, int len)
-{
- uint8 *dst = st->pos + st->avail;
-
- memcpy(dst, src, len);
- px_md_update(st->ctx->mdc_ctx, src, len);
- st->avail += len;
-}
-
-static void
-mdcbuf_load_mdc(struct MDCBufData * st, uint8 *src, int len)
-{
- memmove(st->mdc_buf + st->mdc_avail, src, len);
- st->mdc_avail += len;
-}
-
-static int
-mdcbuf_refill(struct MDCBufData * st, PullFilter *src)
-{
- uint8 *data;
- int res;
- int need;
-
- /* put avail data in start */
- if (st->avail > 0 && st->pos != st->buf)
- memmove(st->buf, st->pos, st->avail);
- st->pos = st->buf;
-
- /* read new data */
- need = st->buflen + 22 - st->avail - st->mdc_avail;
- res = pullf_read(src, need, &data);
- if (res < 0)
- return res;
- if (res == 0)
- return mdcbuf_finish(st);
-
- /* add to buffer */
- if (res >= 22)
- {
- mdcbuf_load_data(st, st->mdc_buf, st->mdc_avail);
- st->mdc_avail = 0;
-
- mdcbuf_load_data(st, data, res - 22);
- mdcbuf_load_mdc(st, data + res - 22, 22);
- }
- else
- {
- int canmove = st->mdc_avail + res - 22;
-
- if (canmove > 0)
- {
- mdcbuf_load_data(st, st->mdc_buf, canmove);
- st->mdc_avail -= canmove;
- memmove(st->mdc_buf, st->mdc_buf + canmove, st->mdc_avail);
- }
- mdcbuf_load_mdc(st, data, res);
- }
- return 0;
-}
-
-static int
-mdcbuf_read(void *priv, PullFilter *src, int len,
- uint8 **data_p, uint8 *buf, int buflen)
-{
- struct MDCBufData *st = priv;
- int res;
-
- if (!st->eof && len > st->avail)
- {
- res = mdcbuf_refill(st, src);
- if (res < 0)
- return res;
- }
-
- if (len > st->avail)
- len = st->avail;
-
- *data_p = st->pos;
- st->pos += len;
- st->avail -= len;
- return len;
-}
-
-static void
-mdcbuf_free(void *priv)
-{
- struct MDCBufData *st = priv;
-
- px_md_free(st->ctx->mdc_ctx);
- st->ctx->mdc_ctx = NULL;
- memset(st, 0, sizeof(*st));
- px_free(st);
-}
-
-static struct PullFilterOps mdcbuf_filter = {
- mdcbuf_init, mdcbuf_read, mdcbuf_free
-};
-
-
-/*
- * Decrypt separate session key
- */
-static int
-decrypt_key(PGP_Context *ctx, const uint8 *src, int len)
-{
- int res;
- uint8 algo;
- PGP_CFB *cfb;
-
- res = pgp_cfb_create(&cfb, ctx->s2k_cipher_algo,
- ctx->s2k.key, ctx->s2k.key_len, 0, NULL);
- if (res < 0)
- return res;
-
- pgp_cfb_decrypt(cfb, src, 1, &algo);
- src++;
- len--;
-
- pgp_cfb_decrypt(cfb, src, len, ctx->sess_key);
- pgp_cfb_free(cfb);
- ctx->sess_key_len = len;
- ctx->cipher_algo = algo;
-
- if (pgp_get_cipher_key_size(algo) != len)
- {
- px_debug("sesskey bad len: algo=%d, expected=%d, got=%d",
- algo, pgp_get_cipher_key_size(algo), len);
- return PXE_PGP_CORRUPT_DATA;
- }
- return 0;
-}
-
-/*
- * Handle key packet
- */
-static int
-parse_symenc_sesskey(PGP_Context *ctx, PullFilter *src)
-{
- uint8 *p;
- int res;
- uint8 tmpbuf[PGP_MAX_KEY + 2];
- uint8 ver;
-
- GETBYTE(src, ver);
- GETBYTE(src, ctx->s2k_cipher_algo);
- if (ver != 4)
- {
- px_debug("bad key pkt ver");
- return PXE_PGP_CORRUPT_DATA;
- }
-
- /*
- * read S2K info
- */
- res = pgp_s2k_read(src, &ctx->s2k);
- if (res < 0)
- return res;
- ctx->s2k_mode = ctx->s2k.mode;
- ctx->s2k_digest_algo = ctx->s2k.digest_algo;
-
- /*
- * generate key from password
- */
- res = pgp_s2k_process(&ctx->s2k, ctx->s2k_cipher_algo,
- ctx->sym_key, ctx->sym_key_len);
- if (res < 0)
- return res;
-
- /*
- * do we have separate session key?
- */
- res = pullf_read_max(src, PGP_MAX_KEY + 2, &p, tmpbuf);
- if (res < 0)
- return res;
-
- if (res == 0)
- {
- /*
- * no, s2k key is session key
- */
- memcpy(ctx->sess_key, ctx->s2k.key, ctx->s2k.key_len);
- ctx->sess_key_len = ctx->s2k.key_len;
- ctx->cipher_algo = ctx->s2k_cipher_algo;
- res = 0;
- ctx->use_sess_key = 0;
- }
- else
- {
- /*
- * yes, decrypt it
- */
- if (res < 17 || res > PGP_MAX_KEY + 1)
- {
- px_debug("expect key, but bad data");
- return PXE_PGP_CORRUPT_DATA;
- }
- ctx->use_sess_key = 1;
- res = decrypt_key(ctx, p, res);
- }
-
- memset(tmpbuf, 0, sizeof(tmpbuf));
- return res;
-}
-
-static int
-copy_crlf(MBuf *dst, uint8 *data, int len, int *got_cr)
-{
- uint8 *data_end = data + len;
- uint8 tmpbuf[1024];
- uint8 *tmp_end = tmpbuf + sizeof(tmpbuf);
- uint8 *p;
- int res;
-
- p = tmpbuf;
- if (*got_cr)
- {
- if (*data != '\n')
- *p++ = '\r';
- *got_cr = 0;
- }
- while (data < data_end)
- {
- if (*data == '\r')
- {
- if (data + 1 < data_end)
- {
- if (*(data + 1) == '\n')
- data++;
- }
- else
- {
- *got_cr = 1;
- break;
- }
- }
- *p++ = *data++;
- if (p >= tmp_end)
- {
- res = mbuf_append(dst, tmpbuf, p - tmpbuf);
- if (res < 0)
- return res;
- p = tmpbuf;
- }
- }
- if (p - tmpbuf > 0)
- {
- res = mbuf_append(dst, tmpbuf, p - tmpbuf);
- if (res < 0)
- return res;
- }
- return 0;
-}
-
-static int
-parse_literal_data(PGP_Context *ctx, MBuf *dst, PullFilter *pkt)
-{
- int type;
- int name_len;
- int res;
- uint8 *buf;
- uint8 tmpbuf[4];
- int got_cr = 0;
-
- GETBYTE(pkt, type);
- GETBYTE(pkt, name_len);
-
- /* skip name */
- while (name_len > 0)
- {
- res = pullf_read(pkt, name_len, &buf);
- if (res < 0)
- return res;
- if (res == 0)
- break;
- name_len -= res;
- }
- if (name_len > 0)
- {
- px_debug("parse_literal_data: unexpected eof");
- return PXE_PGP_CORRUPT_DATA;
- }
-
- /* skip date */
- res = pullf_read_max(pkt, 4, &buf, tmpbuf);
- if (res != 4)
- {
- px_debug("parse_literal_data: unexpected eof");
- return PXE_PGP_CORRUPT_DATA;
- }
- memset(tmpbuf, 0, 4);
-
- /* check if text */
- if (ctx->text_mode)
- if (type != 't' && type != 'u')
- {
- px_debug("parse_literal_data: data type=%c", type);
- return PXE_PGP_NOT_TEXT;
- }
-
- ctx->unicode_mode = (type == 'u') ? 1 : 0;
-
- /* read data */
- while (1)
- {
- res = pullf_read(pkt, 32 * 1024, &buf);
- if (res <= 0)
- break;
-
- if (ctx->text_mode && ctx->convert_crlf)
- res = copy_crlf(dst, buf, res, &got_cr);
- else
- res = mbuf_append(dst, buf, res);
- if (res < 0)
- break;
- }
- if (res >= 0 && got_cr)
- res = mbuf_append(dst, (const uint8 *) "\r", 1);
- return res;
-}
-
-/* process_data_packets and parse_compressed_data call each other */
-static int process_data_packets(PGP_Context *ctx, MBuf *dst,
- PullFilter *src, int allow_compr, int need_mdc);
-
-static int
-parse_compressed_data(PGP_Context *ctx, MBuf *dst, PullFilter *pkt)
-{
- int res;
- uint8 type;
- PullFilter *pf_decompr;
-
- GETBYTE(pkt, type);
-
- ctx->compress_algo = type;
- switch (type)
- {
- case PGP_COMPR_NONE:
- res = process_data_packets(ctx, dst, pkt, NO_COMPR, NO_MDC);
- break;
-
- case PGP_COMPR_ZIP:
- case PGP_COMPR_ZLIB:
- res = pgp_decompress_filter(&pf_decompr, ctx, pkt);
- if (res >= 0)
- {
- res = process_data_packets(ctx, dst, pf_decompr,
- NO_COMPR, NO_MDC);
- pullf_free(pf_decompr);
- }
- break;
-
- case PGP_COMPR_BZIP2:
- px_debug("parse_compressed_data: bzip2 unsupported");
- res = PXE_PGP_UNSUPPORTED_COMPR;
- break;
-
- default:
- px_debug("parse_compressed_data: unknown compr type");
- res = PXE_PGP_CORRUPT_DATA;
- }
-
- return res;
-}
-
-static int
-process_data_packets(PGP_Context *ctx, MBuf *dst, PullFilter *src,
- int allow_compr, int need_mdc)
-{
- uint8 tag = 0;
- int len = 0,
- res;
- int got_data = 0;
- int got_mdc = 0;
- PullFilter *pkt = NULL;
- uint8 *tmp;
-
- while (1)
- {
- res = pgp_parse_pkt_hdr(src, &tag, &len, ALLOW_CTX_SIZE);
- if (res <= 0)
- break;
-
-
- /* mdc packet should be last */
- if (got_mdc)
- {
- px_debug("process_data_packets: data after mdc");
- res = PXE_PGP_CORRUPT_DATA;
- break;
- }
-
- /* context length inside SYMENC_MDC needs special handling */
- if (need_mdc && res == PKT_CONTEXT)
- res = pullf_create(&pkt, &mdcbuf_filter, ctx, src);
- else
- res = pgp_create_pkt_reader(&pkt, src, len, res, ctx);
- if (res < 0)
- break;
-
- switch (tag)
- {
- case PGP_PKT_LITERAL_DATA:
- got_data = 1;
- res = parse_literal_data(ctx, dst, pkt);
- break;
- case PGP_PKT_COMPRESSED_DATA:
- if (allow_compr == 0)
- {
- px_debug("process_data_packets: unexpected compression");
- res = PXE_PGP_CORRUPT_DATA;
- }
- else if (got_data)
- {
- /*
- * compr data must be alone
- */
- px_debug("process_data_packets: only one cmpr pkt allowed");
- res = PXE_PGP_CORRUPT_DATA;
- }
- else
- {
- got_data = 1;
- res = parse_compressed_data(ctx, dst, pkt);
- }
- break;
- case PGP_PKT_MDC:
- if (need_mdc == NO_MDC)
- {
- px_debug("process_data_packets: unexpected MDC");
- res = PXE_PGP_CORRUPT_DATA;
- break;
- }
-
- /* notify mdc_filter */
- ctx->in_mdc_pkt = 1;
-
- res = pullf_read(pkt, 8192, &tmp);
- if (res > 0)
- got_mdc = 1;
- break;
- default:
- px_debug("process_data_packets: unexpected pkt tag=%d", tag);
- res = PXE_PGP_CORRUPT_DATA;
- }
-
- pullf_free(pkt);
- pkt = NULL;
-
- if (res < 0)
- break;
- }
-
- if (pkt)
- pullf_free(pkt);
-
- if (res < 0)
- return res;
-
- if (!got_data)
- {
- px_debug("process_data_packets: no data");
- res = PXE_PGP_CORRUPT_DATA;
- }
- if (need_mdc && !got_mdc && !ctx->use_mdcbuf_filter)
- {
- px_debug("process_data_packets: got no mdc");
- res = PXE_PGP_CORRUPT_DATA;
- }
- return res;
-}
-
-static int
-parse_symenc_data(PGP_Context *ctx, PullFilter *pkt, MBuf *dst)
-{
- int res;
- PGP_CFB *cfb = NULL;
- PullFilter *pf_decrypt = NULL;
- PullFilter *pf_prefix = NULL;
-
- res = pgp_cfb_create(&cfb, ctx->cipher_algo,
- ctx->sess_key, ctx->sess_key_len, 1, NULL);
- if (res < 0)
- goto out;
-
- res = pullf_create(&pf_decrypt, &pgp_decrypt_filter, cfb, pkt);
- if (res < 0)
- goto out;
-
- res = pullf_create(&pf_prefix, &prefix_filter, ctx, pf_decrypt);
- if (res < 0)
- goto out;
-
- res = process_data_packets(ctx, dst, pf_prefix, ALLOW_COMPR, NO_MDC);
-
-out:
- if (pf_prefix)
- pullf_free(pf_prefix);
- if (pf_decrypt)
- pullf_free(pf_decrypt);
- if (cfb)
- pgp_cfb_free(cfb);
-
- return res;
-}
-
-static int
-parse_symenc_mdc_data(PGP_Context *ctx, PullFilter *pkt, MBuf *dst)
-{
- int res;
- PGP_CFB *cfb = NULL;
- PullFilter *pf_decrypt = NULL;
- PullFilter *pf_prefix = NULL;
- PullFilter *pf_mdc = NULL;
- uint8 ver;
-
- GETBYTE(pkt, ver);
- if (ver != 1)
- {
- px_debug("parse_symenc_mdc_data: pkt ver != 1");
- return PXE_PGP_CORRUPT_DATA;
- }
-
- res = pgp_cfb_create(&cfb, ctx->cipher_algo,
- ctx->sess_key, ctx->sess_key_len, 0, NULL);
- if (res < 0)
- goto out;
-
- res = pullf_create(&pf_decrypt, &pgp_decrypt_filter, cfb, pkt);
- if (res < 0)
- goto out;
-
- res = pullf_create(&pf_mdc, &mdc_filter, ctx, pf_decrypt);
- if (res < 0)
- goto out;
-
- res = pullf_create(&pf_prefix, &prefix_filter, ctx, pf_mdc);
- if (res < 0)
- goto out;
-
- res = process_data_packets(ctx, dst, pf_prefix, ALLOW_COMPR, NEED_MDC);
-
-out:
- if (pf_prefix)
- pullf_free(pf_prefix);
- if (pf_mdc)
- pullf_free(pf_mdc);
- if (pf_decrypt)
- pullf_free(pf_decrypt);
- if (cfb)
- pgp_cfb_free(cfb);
-
- return res;
-}
-
-/*
- * skip over packet contents
- */
-int
-pgp_skip_packet(PullFilter *pkt)
-{
- int res = 1;
- uint8 *tmp;
-
- while (res > 0)
- res = pullf_read(pkt, 32 * 1024, &tmp);
- return res < 0 ? res : 0;
-}
-
-/*
- * expect to be at packet end, any data is error
- */
-int
-pgp_expect_packet_end(PullFilter *pkt)
-{
- int res = 1;
- uint8 *tmp;
-
- while (res > 0)
- {
- res = pullf_read(pkt, 32 * 1024, &tmp);
- if (res > 0)
- {
- px_debug("pgp_expect_packet_end: got data");
- return PXE_PGP_CORRUPT_DATA;
- }
- }
- return res < 0 ? res : 0;
-}
-
-int
-pgp_decrypt(PGP_Context *ctx, MBuf *msrc, MBuf *mdst)
-{
- int res;
- PullFilter *src = NULL;
- PullFilter *pkt = NULL;
- uint8 tag = 0;
- int len = 0;
- int got_key = 0;
- int got_data = 0;
-
- res = pullf_create_mbuf_reader(&src, msrc);
-
- while (res >= 0)
- {
- res = pgp_parse_pkt_hdr(src, &tag, &len, NO_CTX_SIZE);
- if (res <= 0)
- break;
-
- res = pgp_create_pkt_reader(&pkt, src, len, res, ctx);
- if (res < 0)
- break;
-
- res = PXE_PGP_CORRUPT_DATA;
- switch (tag)
- {
- case PGP_PKT_MARKER:
- res = pgp_skip_packet(pkt);
- break;
- case PGP_PKT_PUBENCRYPTED_SESSKEY:
- /* fixme: skip those */
- res = pgp_parse_pubenc_sesskey(ctx, pkt);
- got_key = 1;
- break;
- case PGP_PKT_SYMENCRYPTED_SESSKEY:
- if (got_key)
-
- /*
- * Theoretically, there could be several keys, both public
- * and symmetric, all of which encrypt same session key.
- * Decrypt should try with each one, before failing.
- */
- px_debug("pgp_decrypt: using first of several keys");
- else
- {
- got_key = 1;
- res = parse_symenc_sesskey(ctx, pkt);
- }
- break;
- case PGP_PKT_SYMENCRYPTED_DATA:
- if (!got_key)
- px_debug("pgp_decrypt: have data but no key");
- else if (got_data)
- px_debug("pgp_decrypt: got second data packet");
- else
- {
- got_data = 1;
- ctx->disable_mdc = 1;
- res = parse_symenc_data(ctx, pkt, mdst);
- }
- break;
- case PGP_PKT_SYMENCRYPTED_DATA_MDC:
- if (!got_key)
- px_debug("pgp_decrypt: have data but no key");
- else if (got_data)
- px_debug("pgp_decrypt: several data pkts not supported");
- else
- {
- got_data = 1;
- ctx->disable_mdc = 0;
- res = parse_symenc_mdc_data(ctx, pkt, mdst);
- }
- break;
- default:
- px_debug("pgp_decrypt: unknown tag: 0x%02x", tag);
- }
- pullf_free(pkt);
- pkt = NULL;
- }
-
- if (pkt)
- pullf_free(pkt);
-
- if (src)
- pullf_free(src);
-
- if (res < 0)
- return res;
-
- if (!got_data || ctx->corrupt_prefix)
- res = PXE_PGP_CORRUPT_DATA;
-
- return res;
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/pgp-encrypt.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/pgp-encrypt.c b/contrib/pgcrypto/pgp-encrypt.c
deleted file mode 100644
index 48f2f01..0000000
--- a/contrib/pgcrypto/pgp-encrypt.c
+++ /dev/null
@@ -1,708 +0,0 @@
-/*
- * pgp-encrypt.c
- * OpenPGP encrypt.
- *
- * Copyright (c) 2005 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/pgp-encrypt.c,v 1.4 2009/06/11 14:48:52 momjian Exp $
- */
-
-#include "postgres.h"
-
-#include <time.h>
-
-#include "mbuf.h"
-#include "px.h"
-#include "pgp.h"
-
-
-#define MDC_DIGEST_LEN 20
-#define STREAM_ID 0xE0
-#define STREAM_BLOCK_SHIFT 14
-
-static uint8 *
-render_newlen(uint8 *h, int len)
-{
- if (len <= 191)
- {
- *h++ = len & 255;
- }
- else if (len > 191 && len <= 8383)
- {
- *h++ = ((len - 192) >> 8) + 192;
- *h++ = (len - 192) & 255;
- }
- else
- {
- *h++ = 255;
- *h++ = (len >> 24) & 255;
- *h++ = (len >> 16) & 255;
- *h++ = (len >> 8) & 255;
- *h++ = len & 255;
- }
- return h;
-}
-
-static int
-write_tag_only(PushFilter *dst, int tag)
-{
- uint8 hdr = 0xC0 | tag;
-
- return pushf_write(dst, &hdr, 1);
-}
-
-static int
-write_normal_header(PushFilter *dst, int tag, int len)
-{
- uint8 hdr[8];
- uint8 *h = hdr;
-
- *h++ = 0xC0 | tag;
- h = render_newlen(h, len);
- return pushf_write(dst, hdr, h - hdr);
-}
-
-
-/*
- * MAC writer
- */
-
-static int
-mdc_init(PushFilter *dst, void *init_arg, void **priv_p)
-{
- int res;
- PX_MD *md;
-
- res = pgp_load_digest(PGP_DIGEST_SHA1, &md);
- if (res < 0)
- return res;
-
- *priv_p = md;
- return 0;
-}
-
-static int
-mdc_write(PushFilter *dst, void *priv, const uint8 *data, int len)
-{
- PX_MD *md = priv;
-
- px_md_update(md, data, len);
- return pushf_write(dst, data, len);
-}
-
-static int
-mdc_flush(PushFilter *dst, void *priv)
-{
- int res;
- uint8 pkt[2 + MDC_DIGEST_LEN];
- PX_MD *md = priv;
-
- /*
- * create mdc pkt
- */
- pkt[0] = 0xD3;
- pkt[1] = 0x14; /* MDC_DIGEST_LEN */
- px_md_update(md, pkt, 2);
- px_md_finish(md, pkt + 2);
-
- res = pushf_write(dst, pkt, 2 + MDC_DIGEST_LEN);
- memset(pkt, 0, 2 + MDC_DIGEST_LEN);
- return res;
-}
-
-static void
-mdc_free(void *priv)
-{
- PX_MD *md = priv;
-
- px_md_free(md);
-}
-
-static const PushFilterOps mdc_filter = {
- mdc_init, mdc_write, mdc_flush, mdc_free
-};
-
-
-/*
- * Encrypted pkt writer
- */
-#define ENCBUF 8192
-struct EncStat
-{
- PGP_CFB *ciph;
- uint8 buf[ENCBUF];
-};
-
-static int
-encrypt_init(PushFilter *next, void *init_arg, void **priv_p)
-{
- struct EncStat *st;
- PGP_Context *ctx = init_arg;
- PGP_CFB *ciph;
- int resync = 1;
- int res;
-
- /* should we use newer packet format? */
- if (ctx->disable_mdc == 0)
- {
- uint8 ver = 1;
-
- resync = 0;
- res = pushf_write(next, &ver, 1);
- if (res < 0)
- return res;
- }
- res = pgp_cfb_create(&ciph, ctx->cipher_algo,
- ctx->sess_key, ctx->sess_key_len, resync, NULL);
- if (res < 0)
- return res;
-
- st = px_alloc(sizeof(*st));
- memset(st, 0, sizeof(*st));
- st->ciph = ciph;
-
- *priv_p = st;
- return ENCBUF;
-}
-
-static int
-encrypt_process(PushFilter *next, void *priv, const uint8 *data, int len)
-{
- int res;
- struct EncStat *st = priv;
- int avail = len;
-
- while (avail > 0)
- {
- int tmplen = avail > ENCBUF ? ENCBUF : avail;
-
- res = pgp_cfb_encrypt(st->ciph, data, tmplen, st->buf);
- if (res < 0)
- return res;
-
- res = pushf_write(next, st->buf, tmplen);
- if (res < 0)
- return res;
-
- data += tmplen;
- avail -= tmplen;
- }
- return 0;
-}
-
-static void
-encrypt_free(void *priv)
-{
- struct EncStat *st = priv;
-
- memset(st, 0, sizeof(*st));
- px_free(st);
-}
-
-static const PushFilterOps encrypt_filter = {
- encrypt_init, encrypt_process, NULL, encrypt_free
-};
-
-/*
- * Write Streamable pkts
- */
-
-struct PktStreamStat
-{
- int final_done;
- int pkt_block;
-};
-
-static int
-pkt_stream_init(PushFilter *next, void *init_arg, void **priv_p)
-{
- struct PktStreamStat *st;
-
- st = px_alloc(sizeof(*st));
- st->final_done = 0;
- st->pkt_block = 1 << STREAM_BLOCK_SHIFT;
- *priv_p = st;
-
- return st->pkt_block;
-}
-
-static int
-pkt_stream_process(PushFilter *next, void *priv, const uint8 *data, int len)
-{
- int res;
- uint8 hdr[8];
- uint8 *h = hdr;
- struct PktStreamStat *st = priv;
-
- if (st->final_done)
- return PXE_BUG;
-
- if (len == st->pkt_block)
- *h++ = STREAM_ID | STREAM_BLOCK_SHIFT;
- else
- {
- h = render_newlen(h, len);
- st->final_done = 1;
- }
-
- res = pushf_write(next, hdr, h - hdr);
- if (res < 0)
- return res;
-
- return pushf_write(next, data, len);
-}
-
-static int
-pkt_stream_flush(PushFilter *next, void *priv)
-{
- int res;
- uint8 hdr[8];
- uint8 *h = hdr;
- struct PktStreamStat *st = priv;
-
- /* stream MUST end with normal packet. */
- if (!st->final_done)
- {
- h = render_newlen(h, 0);
- res = pushf_write(next, hdr, h - hdr);
- if (res < 0)
- return res;
- st->final_done = 1;
- }
- return 0;
-}
-
-static void
-pkt_stream_free(void *priv)
-{
- struct PktStreamStat *st = priv;
-
- memset(st, 0, sizeof(*st));
- px_free(st);
-}
-
-static const PushFilterOps pkt_stream_filter = {
- pkt_stream_init, pkt_stream_process, pkt_stream_flush, pkt_stream_free
-};
-
-int
-pgp_create_pkt_writer(PushFilter *dst, int tag, PushFilter **res_p)
-{
- int res;
-
- res = write_tag_only(dst, tag);
- if (res < 0)
- return res;
-
- return pushf_create(res_p, &pkt_stream_filter, NULL, dst);
-}
-
-/*
- * Text conversion filter
- */
-
-static int
-crlf_process(PushFilter *dst, void *priv, const uint8 *data, int len)
-{
- const uint8 *data_end = data + len;
- const uint8 *p2,
- *p1 = data;
- int line_len;
- static const uint8 crlf[] = {'\r', '\n'};
- int res = 0;
-
- while (p1 < data_end)
- {
- p2 = memchr(p1, '\n', data_end - p1);
- if (p2 == NULL)
- p2 = data_end;
-
- line_len = p2 - p1;
-
- /* write data */
- res = 0;
- if (line_len > 0)
- {
- res = pushf_write(dst, p1, line_len);
- if (res < 0)
- break;
- p1 += line_len;
- }
-
- /* write crlf */
- while (p1 < data_end && *p1 == '\n')
- {
- res = pushf_write(dst, crlf, 2);
- if (res < 0)
- break;
- p1++;
- }
- }
- return res;
-}
-
-static const PushFilterOps crlf_filter = {
- NULL, crlf_process, NULL, NULL
-};
-
-/*
- * Initialize literal data packet
- */
-static int
-init_litdata_packet(PushFilter **pf_res, PGP_Context *ctx, PushFilter *dst)
-{
- int res;
- int hdrlen;
- uint8 hdr[6];
- uint32 t;
- PushFilter *pkt;
- int type;
-
- /*
- * Create header
- */
-
- if (ctx->text_mode)
- type = ctx->unicode_mode ? 'u' : 't';
- else
- type = 'b';
-
- /*
- * Store the creation time into packet. The goal is to have as few known
- * bytes as possible.
- */
- t = (uint32) time(NULL);
-
- hdr[0] = type;
- hdr[1] = 0;
- hdr[2] = (t >> 24) & 255;
- hdr[3] = (t >> 16) & 255;
- hdr[4] = (t >> 8) & 255;
- hdr[5] = t & 255;
- hdrlen = 6;
-
- res = write_tag_only(dst, PGP_PKT_LITERAL_DATA);
- if (res < 0)
- return res;
-
- res = pushf_create(&pkt, &pkt_stream_filter, ctx, dst);
- if (res < 0)
- return res;
-
- res = pushf_write(pkt, hdr, hdrlen);
- if (res < 0)
- {
- pushf_free(pkt);
- return res;
- }
-
- *pf_res = pkt;
- return 0;
-}
-
-/*
- * Initialize compression filter
- */
-static int
-init_compress(PushFilter **pf_res, PGP_Context *ctx, PushFilter *dst)
-{
- int res;
- uint8 type = ctx->compress_algo;
- PushFilter *pkt;
-
- res = write_tag_only(dst, PGP_PKT_COMPRESSED_DATA);
- if (res < 0)
- return res;
-
- res = pushf_create(&pkt, &pkt_stream_filter, ctx, dst);
- if (res < 0)
- return res;
-
- res = pushf_write(pkt, &type, 1);
- if (res >= 0)
- res = pgp_compress_filter(pf_res, ctx, pkt);
-
- if (res < 0)
- pushf_free(pkt);
-
- return res;
-}
-
-/*
- * Initialize encdata packet
- */
-static int
-init_encdata_packet(PushFilter **pf_res, PGP_Context *ctx, PushFilter *dst)
-{
- int res;
- int tag;
-
- if (ctx->disable_mdc)
- tag = PGP_PKT_SYMENCRYPTED_DATA;
- else
- tag = PGP_PKT_SYMENCRYPTED_DATA_MDC;
-
- res = write_tag_only(dst, tag);
- if (res < 0)
- return res;
-
- return pushf_create(pf_res, &pkt_stream_filter, ctx, dst);
-}
-
-/*
- * write prefix
- */
-static int
-write_prefix(PGP_Context *ctx, PushFilter *dst)
-{
- uint8 prefix[PGP_MAX_BLOCK + 2];
- int res,
- bs;
-
- bs = pgp_get_cipher_block_size(ctx->cipher_algo);
- res = px_get_random_bytes(prefix, bs);
- if (res < 0)
- return res;
-
- prefix[bs + 0] = prefix[bs - 2];
- prefix[bs + 1] = prefix[bs - 1];
-
- res = pushf_write(dst, prefix, bs + 2);
- memset(prefix, 0, bs + 2);
- return res < 0 ? res : 0;
-}
-
-/*
- * write symmetrically encrypted session key packet
- */
-
-static int
-symencrypt_sesskey(PGP_Context *ctx, uint8 *dst)
-{
- int res;
- PGP_CFB *cfb;
- uint8 algo = ctx->cipher_algo;
-
- res = pgp_cfb_create(&cfb, ctx->s2k_cipher_algo,
- ctx->s2k.key, ctx->s2k.key_len, 0, NULL);
- if (res < 0)
- return res;
-
- pgp_cfb_encrypt(cfb, &algo, 1, dst);
- pgp_cfb_encrypt(cfb, ctx->sess_key, ctx->sess_key_len, dst + 1);
-
- pgp_cfb_free(cfb);
- return ctx->sess_key_len + 1;
-}
-
-/* 5.3: Symmetric-Key Encrypted Session-Key */
-static int
-write_symenc_sesskey(PGP_Context *ctx, PushFilter *dst)
-{
- uint8 pkt[256];
- int pktlen;
- int res;
- uint8 *p = pkt;
-
- *p++ = 4; /* 5.3 - version number */
- *p++ = ctx->s2k_cipher_algo;
-
- *p++ = ctx->s2k.mode;
- *p++ = ctx->s2k.digest_algo;
- if (ctx->s2k.mode > 0)
- {
- memcpy(p, ctx->s2k.salt, 8);
- p += 8;
- }
- if (ctx->s2k.mode == 3)
- *p++ = ctx->s2k.iter;
-
- if (ctx->use_sess_key)
- {
- res = symencrypt_sesskey(ctx, p);
- if (res < 0)
- return res;
- p += res;
- }
-
- pktlen = p - pkt;
- res = write_normal_header(dst, PGP_PKT_SYMENCRYPTED_SESSKEY, pktlen);
- if (res >= 0)
- res = pushf_write(dst, pkt, pktlen);
-
- memset(pkt, 0, pktlen);
- return res;
-}
-
-/*
- * key setup
- */
-static int
-init_s2k_key(PGP_Context *ctx)
-{
- int res;
-
- if (ctx->s2k_cipher_algo < 0)
- ctx->s2k_cipher_algo = ctx->cipher_algo;
-
- res = pgp_s2k_fill(&ctx->s2k, ctx->s2k_mode, ctx->s2k_digest_algo);
- if (res < 0)
- return res;
-
- return pgp_s2k_process(&ctx->s2k, ctx->s2k_cipher_algo,
- ctx->sym_key, ctx->sym_key_len);
-}
-
-static int
-init_sess_key(PGP_Context *ctx)
-{
- int res;
-
- if (ctx->use_sess_key || ctx->pub_key)
- {
- ctx->sess_key_len = pgp_get_cipher_key_size(ctx->cipher_algo);
- res = px_get_random_bytes(ctx->sess_key, ctx->sess_key_len);
- if (res < 0)
- return res;
- }
- else
- {
- ctx->sess_key_len = ctx->s2k.key_len;
- memcpy(ctx->sess_key, ctx->s2k.key, ctx->s2k.key_len);
- }
-
- return 0;
-}
-
-/*
- * combine
- */
-int
-pgp_encrypt(PGP_Context *ctx, MBuf *src, MBuf *dst)
-{
- int res;
- int len;
- uint8 *buf;
- PushFilter *pf,
- *pf_tmp;
-
- /*
- * do we have any key
- */
- if (!ctx->sym_key && !ctx->pub_key)
- return PXE_ARGUMENT_ERROR;
-
- /* MBuf writer */
- res = pushf_create_mbuf_writer(&pf, dst);
- if (res < 0)
- goto out;
-
- /*
- * initialize symkey
- */
- if (ctx->sym_key)
- {
- res = init_s2k_key(ctx);
- if (res < 0)
- goto out;
- }
-
- res = init_sess_key(ctx);
- if (res < 0)
- goto out;
-
- /*
- * write keypkt
- */
- if (ctx->pub_key)
- res = pgp_write_pubenc_sesskey(ctx, pf);
- else
- res = write_symenc_sesskey(ctx, pf);
- if (res < 0)
- goto out;
-
- /* encrypted data pkt */
- res = init_encdata_packet(&pf_tmp, ctx, pf);
- if (res < 0)
- goto out;
- pf = pf_tmp;
-
- /* encrypter */
- res = pushf_create(&pf_tmp, &encrypt_filter, ctx, pf);
- if (res < 0)
- goto out;
- pf = pf_tmp;
-
- /* hasher */
- if (ctx->disable_mdc == 0)
- {
- res = pushf_create(&pf_tmp, &mdc_filter, ctx, pf);
- if (res < 0)
- goto out;
- pf = pf_tmp;
- }
-
- /* prefix */
- res = write_prefix(ctx, pf);
- if (res < 0)
- goto out;
-
- /* compressor */
- if (ctx->compress_algo > 0 && ctx->compress_level > 0)
- {
- res = init_compress(&pf_tmp, ctx, pf);
- if (res < 0)
- goto out;
- pf = pf_tmp;
- }
-
- /* data streamer */
- res = init_litdata_packet(&pf_tmp, ctx, pf);
- if (res < 0)
- goto out;
- pf = pf_tmp;
-
-
- /* text conversion? */
- if (ctx->text_mode && ctx->convert_crlf)
- {
- res = pushf_create(&pf_tmp, &crlf_filter, ctx, pf);
- if (res < 0)
- goto out;
- pf = pf_tmp;
- }
-
- /*
- * chain complete
- */
-
- len = mbuf_grab(src, mbuf_avail(src), &buf);
- res = pushf_write(pf, buf, len);
- if (res >= 0)
- res = pushf_flush(pf);
-out:
- pushf_free_all(pf);
- return res;
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/pgp-info.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/pgp-info.c b/contrib/pgcrypto/pgp-info.c
deleted file mode 100644
index a51a553..0000000
--- a/contrib/pgcrypto/pgp-info.c
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * pgp-info.c
- * Provide info about PGP data.
- *
- * Copyright (c) 2005 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/pgp-info.c,v 1.5 2009/06/11 14:48:52 momjian Exp $
- */
-#include "postgres.h"
-
-#include "px.h"
-#include "mbuf.h"
-#include "pgp.h"
-
-static int
-read_pubkey_keyid(PullFilter *pkt, uint8 *keyid_buf)
-{
- int res;
- PGP_PubKey *pk = NULL;
-
- res = _pgp_read_public_key(pkt, &pk);
- if (res < 0)
- goto err;
-
- /* skip secret key part, if it exists */
- res = pgp_skip_packet(pkt);
- if (res < 0)
- goto err;
-
- /* is it encryption key */
- switch (pk->algo)
- {
- case PGP_PUB_ELG_ENCRYPT:
- case PGP_PUB_RSA_ENCRYPT:
- case PGP_PUB_RSA_ENCRYPT_SIGN:
- memcpy(keyid_buf, pk->key_id, 8);
- res = 1;
- break;
- default:
- res = 0;
- }
-
-err:
- pgp_key_free(pk);
- return res;
-}
-
-static int
-read_pubenc_keyid(PullFilter *pkt, uint8 *keyid_buf)
-{
- uint8 ver;
- int res;
-
- GETBYTE(pkt, ver);
- if (ver != 3)
- return -1;
-
- res = pullf_read_fixed(pkt, 8, keyid_buf);
- if (res < 0)
- return res;
-
- return pgp_skip_packet(pkt);
-}
-
-static const char hextbl[] = "0123456789ABCDEF";
-
-static int
-print_key(uint8 *keyid, char *dst)
-{
- int i;
- unsigned c;
-
- for (i = 0; i < 8; i++)
- {
- c = keyid[i];
- *dst++ = hextbl[(c >> 4) & 0x0F];
- *dst++ = hextbl[c & 0x0F];
- }
- *dst = 0;
- return 8 * 2;
-}
-
-static const uint8 any_key[] =
-{0, 0, 0, 0, 0, 0, 0, 0};
-
-/*
- * dst should have room for 17 bytes
- */
-int
-pgp_get_keyid(MBuf *pgp_data, char *dst)
-{
- int res;
- PullFilter *src;
- PullFilter *pkt = NULL;
- int len;
- uint8 tag;
- int got_pub_key = 0,
- got_symenc_key = 0,
- got_pubenc_key = 0;
- int got_data = 0;
- uint8 keyid_buf[8];
- int got_main_key = 0;
-
-
- res = pullf_create_mbuf_reader(&src, pgp_data);
- if (res < 0)
- return res;
-
- while (1)
- {
- res = pgp_parse_pkt_hdr(src, &tag, &len, 0);
- if (res <= 0)
- break;
- res = pgp_create_pkt_reader(&pkt, src, len, res, NULL);
- if (res < 0)
- break;
-
- switch (tag)
- {
- case PGP_PKT_SECRET_KEY:
- case PGP_PKT_PUBLIC_KEY:
- /* main key is for signing, so ignore it */
- if (!got_main_key)
- {
- got_main_key = 1;
- res = pgp_skip_packet(pkt);
- }
- else
- res = PXE_PGP_MULTIPLE_KEYS;
- break;
- case PGP_PKT_SECRET_SUBKEY:
- case PGP_PKT_PUBLIC_SUBKEY:
- res = read_pubkey_keyid(pkt, keyid_buf);
- if (res < 0)
- break;
- if (res > 0)
- got_pub_key++;
- break;
- case PGP_PKT_PUBENCRYPTED_SESSKEY:
- got_pubenc_key++;
- res = read_pubenc_keyid(pkt, keyid_buf);
- break;
- case PGP_PKT_SYMENCRYPTED_DATA:
- case PGP_PKT_SYMENCRYPTED_DATA_MDC:
- /* don't skip it, just stop */
- got_data = 1;
- break;
- case PGP_PKT_SYMENCRYPTED_SESSKEY:
- got_symenc_key++;
- /* fallthru */
- case PGP_PKT_SIGNATURE:
- case PGP_PKT_MARKER:
- case PGP_PKT_TRUST:
- case PGP_PKT_USER_ID:
- case PGP_PKT_USER_ATTR:
- case PGP_PKT_PRIV_61:
- res = pgp_skip_packet(pkt);
- break;
- default:
- res = PXE_PGP_CORRUPT_DATA;
- }
-
- if (pkt)
- pullf_free(pkt);
- pkt = NULL;
-
- if (res < 0 || got_data)
- break;
- }
-
- pullf_free(src);
- if (pkt)
- pullf_free(pkt);
-
- if (res < 0)
- return res;
-
- /* now check sanity */
- if (got_pub_key && got_pubenc_key)
- res = PXE_PGP_CORRUPT_DATA;
-
- if (got_pub_key > 1)
- res = PXE_PGP_MULTIPLE_KEYS;
-
- if (got_pubenc_key > 1)
- res = PXE_PGP_MULTIPLE_KEYS;
-
- /*
- * if still ok, look what we got
- */
- if (res >= 0)
- {
- if (got_pubenc_key || got_pub_key)
- {
- if (memcmp(keyid_buf, any_key, 8) == 0)
- {
- memcpy(dst, "ANYKEY", 7);
- res = 6;
- }
- else
- res = print_key(keyid_buf, dst);
- }
- else if (got_symenc_key)
- {
- memcpy(dst, "SYMKEY", 7);
- res = 6;
- }
- else
- res = PXE_PGP_NO_USABLE_KEY;
- }
-
- return res;
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/pgp-mpi-internal.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/pgp-mpi-internal.c b/contrib/pgcrypto/pgp-mpi-internal.c
deleted file mode 100644
index 283946b..0000000
--- a/contrib/pgcrypto/pgp-mpi-internal.c
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * pgp-mpi-internal.c
- * OpenPGP MPI functions.
- *
- * Copyright (c) 2005 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/pgp-mpi-internal.c,v 1.8 2009/06/11 14:48:52 momjian Exp $
- */
-#include "postgres.h"
-
-#include "imath.h"
-
-#include "px.h"
-#include "mbuf.h"
-#include "pgp.h"
-
-static mpz_t *
-mp_new()
-{
- mpz_t *mp = mp_int_alloc();
-
- mp_int_init_size(mp, 256);
- return mp;
-}
-
-static void
-mp_clear_free(mpz_t *a)
-{
- if (!a)
- return;
- /* fixme: no clear? */
- mp_int_free(a);
-}
-
-
-static int
-mp_px_rand(uint32 bits, mpz_t *res)
-{
- int err;
- unsigned bytes = (bits + 7) / 8;
- int last_bits = bits & 7;
- uint8 *buf;
-
- buf = px_alloc(bytes);
- err = px_get_random_bytes(buf, bytes);
- if (err < 0)
- {
- px_free(buf);
- return err;
- }
-
- /* clear unnecessary bits and set last bit to one */
- if (last_bits)
- {
- buf[0] >>= 8 - last_bits;
- buf[0] |= 1 << (last_bits - 1);
- }
- else
- buf[0] |= 1 << 7;
-
- mp_int_read_unsigned(res, buf, bytes);
-
- px_free(buf);
-
- return 0;
-}
-
-static void
-mp_modmul(mpz_t *a, mpz_t *b, mpz_t *p, mpz_t *res)
-{
- mpz_t *tmp = mp_new();
-
- mp_int_mul(a, b, tmp);
- mp_int_mod(tmp, p, res);
- mp_clear_free(tmp);
-}
-
-static mpz_t *
-mpi_to_bn(PGP_MPI *n)
-{
- mpz_t *bn = mp_new();
-
- mp_int_read_unsigned(bn, n->data, n->bytes);
-
- if (!bn)
- return NULL;
- if (mp_int_count_bits(bn) != n->bits)
- {
- px_debug("mpi_to_bn: bignum conversion failed: mpi=%d, bn=%d",
- n->bits, mp_int_count_bits(bn));
- mp_clear_free(bn);
- return NULL;
- }
- return bn;
-}
-
-static PGP_MPI *
-bn_to_mpi(mpz_t *bn)
-{
- int res;
- PGP_MPI *n;
- int bytes;
-
- res = pgp_mpi_alloc(mp_int_count_bits(bn), &n);
- if (res < 0)
- return NULL;
-
- bytes = (mp_int_count_bits(bn) + 7) / 8;
- if (bytes != n->bytes)
- {
- px_debug("bn_to_mpi: bignum conversion failed: bn=%d, mpi=%d",
- bytes, n->bytes);
- pgp_mpi_free(n);
- return NULL;
- }
- mp_int_to_unsigned(bn, n->data, n->bytes);
- return n;
-}
-
-/*
- * Decide the number of bits in the random componont k
- *
- * It should be in the same range as p for signing (which
- * is deprecated), but can be much smaller for encrypting.
- *
- * Until I research it further, I just mimic gpg behaviour.
- * It has a special mapping table, for values <= 5120,
- * above that it uses 'arbitrary high number'. Following
- * algorihm hovers 10-70 bits above gpg values. And for
- * larger p, it uses gpg's algorihm.
- *
- * The point is - if k gets large, encryption will be
- * really slow. It does not matter for decryption.
- */
-static int
-decide_k_bits(int p_bits)
-{
- if (p_bits <= 5120)
- return p_bits / 10 + 160;
- else
- return (p_bits / 8 + 200) * 3 / 2;
-}
-
-int
-pgp_elgamal_encrypt(PGP_PubKey *pk, PGP_MPI *_m,
- PGP_MPI **c1_p, PGP_MPI **c2_p)
-{
- int res = PXE_PGP_MATH_FAILED;
- int k_bits;
- mpz_t *m = mpi_to_bn(_m);
- mpz_t *p = mpi_to_bn(pk->pub.elg.p);
- mpz_t *g = mpi_to_bn(pk->pub.elg.g);
- mpz_t *y = mpi_to_bn(pk->pub.elg.y);
- mpz_t *k = mp_new();
- mpz_t *yk = mp_new();
- mpz_t *c1 = mp_new();
- mpz_t *c2 = mp_new();
-
- if (!m || !p || !g || !y || !k || !yk || !c1 || !c2)
- goto err;
-
- /*
- * generate k
- */
- k_bits = decide_k_bits(mp_int_count_bits(p));
- res = mp_px_rand(k_bits, k);
- if (res < 0)
- return res;
-
- /*
- * c1 = g^k c2 = m * y^k
- */
- mp_int_exptmod(g, k, p, c1);
- mp_int_exptmod(y, k, p, yk);
- mp_modmul(m, yk, p, c2);
-
- /* result */
- *c1_p = bn_to_mpi(c1);
- *c2_p = bn_to_mpi(c2);
- if (*c1_p && *c2_p)
- res = 0;
-err:
- mp_clear_free(c2);
- mp_clear_free(c1);
- mp_clear_free(yk);
- mp_clear_free(k);
- mp_clear_free(y);
- mp_clear_free(g);
- mp_clear_free(p);
- mp_clear_free(m);
- return res;
-}
-
-int
-pgp_elgamal_decrypt(PGP_PubKey *pk, PGP_MPI *_c1, PGP_MPI *_c2,
- PGP_MPI **msg_p)
-{
- int res = PXE_PGP_MATH_FAILED;
- mpz_t *c1 = mpi_to_bn(_c1);
- mpz_t *c2 = mpi_to_bn(_c2);
- mpz_t *p = mpi_to_bn(pk->pub.elg.p);
- mpz_t *x = mpi_to_bn(pk->sec.elg.x);
- mpz_t *c1x = mp_new();
- mpz_t *div = mp_new();
- mpz_t *m = mp_new();
-
- if (!c1 || !c2 || !p || !x || !c1x || !div || !m)
- goto err;
-
- /*
- * m = c2 / (c1^x)
- */
- mp_int_exptmod(c1, x, p, c1x);
- mp_int_invmod(c1x, p, div);
- mp_modmul(c2, div, p, m);
-
- /* result */
- *msg_p = bn_to_mpi(m);
- if (*msg_p)
- res = 0;
-err:
- mp_clear_free(m);
- mp_clear_free(div);
- mp_clear_free(c1x);
- mp_clear_free(x);
- mp_clear_free(p);
- mp_clear_free(c2);
- mp_clear_free(c1);
- return res;
-}
-
-int
-pgp_rsa_encrypt(PGP_PubKey *pk, PGP_MPI *_m, PGP_MPI **c_p)
-{
- int res = PXE_PGP_MATH_FAILED;
- mpz_t *m = mpi_to_bn(_m);
- mpz_t *e = mpi_to_bn(pk->pub.rsa.e);
- mpz_t *n = mpi_to_bn(pk->pub.rsa.n);
- mpz_t *c = mp_new();
-
- if (!m || !e || !n || !c)
- goto err;
-
- /*
- * c = m ^ e
- */
- mp_int_exptmod(m, e, n, c);
-
- *c_p = bn_to_mpi(c);
- if (*c_p)
- res = 0;
-err:
- mp_clear_free(c);
- mp_clear_free(n);
- mp_clear_free(e);
- mp_clear_free(m);
- return res;
-}
-
-int
-pgp_rsa_decrypt(PGP_PubKey *pk, PGP_MPI *_c, PGP_MPI **m_p)
-{
- int res = PXE_PGP_MATH_FAILED;
- mpz_t *c = mpi_to_bn(_c);
- mpz_t *d = mpi_to_bn(pk->sec.rsa.d);
- mpz_t *n = mpi_to_bn(pk->pub.rsa.n);
- mpz_t *m = mp_new();
-
- if (!m || !d || !n || !c)
- goto err;
-
- /*
- * m = c ^ d
- */
- mp_int_exptmod(c, d, n, m);
-
- *m_p = bn_to_mpi(m);
- if (*m_p)
- res = 0;
-err:
- mp_clear_free(m);
- mp_clear_free(n);
- mp_clear_free(d);
- mp_clear_free(c);
- return res;
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/pgp-mpi-openssl.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/pgp-mpi-openssl.c b/contrib/pgcrypto/pgp-mpi-openssl.c
deleted file mode 100644
index f2b25de..0000000
--- a/contrib/pgcrypto/pgp-mpi-openssl.c
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * pgp-mpi-openssl.c
- * OpenPGP MPI functions using OpenSSL BIGNUM code.
- *
- * Copyright (c) 2005 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/pgp-mpi-openssl.c,v 1.5 2009/06/11 14:48:52 momjian Exp $
- */
-#include "postgres.h"
-
-#include <openssl/bn.h>
-
-#include "px.h"
-#include "mbuf.h"
-#include "pgp.h"
-
-static BIGNUM *
-mpi_to_bn(PGP_MPI *n)
-{
- BIGNUM *bn = BN_bin2bn(n->data, n->bytes, NULL);
-
- if (!bn)
- return NULL;
- if (BN_num_bits(bn) != n->bits)
- {
- px_debug("mpi_to_bn: bignum conversion failed: mpi=%d, bn=%d",
- n->bits, BN_num_bits(bn));
- BN_clear_free(bn);
- return NULL;
- }
- return bn;
-}
-
-static PGP_MPI *
-bn_to_mpi(BIGNUM *bn)
-{
- int res;
- PGP_MPI *n;
-
- res = pgp_mpi_alloc(BN_num_bits(bn), &n);
- if (res < 0)
- return NULL;
-
- if (BN_num_bytes(bn) != n->bytes)
- {
- px_debug("bn_to_mpi: bignum conversion failed: bn=%d, mpi=%d",
- BN_num_bytes(bn), n->bytes);
- pgp_mpi_free(n);
- return NULL;
- }
- BN_bn2bin(bn, n->data);
- return n;
-}
-
-/*
- * Decide the number of bits in the random componont k
- *
- * It should be in the same range as p for signing (which
- * is deprecated), but can be much smaller for encrypting.
- *
- * Until I research it further, I just mimic gpg behaviour.
- * It has a special mapping table, for values <= 5120,
- * above that it uses 'arbitrary high number'. Following
- * algorihm hovers 10-70 bits above gpg values. And for
- * larger p, it uses gpg's algorihm.
- *
- * The point is - if k gets large, encryption will be
- * really slow. It does not matter for decryption.
- */
-static int
-decide_k_bits(int p_bits)
-{
- if (p_bits <= 5120)
- return p_bits / 10 + 160;
- else
- return (p_bits / 8 + 200) * 3 / 2;
-}
-
-int
-pgp_elgamal_encrypt(PGP_PubKey *pk, PGP_MPI *_m,
- PGP_MPI **c1_p, PGP_MPI **c2_p)
-{
- int res = PXE_PGP_MATH_FAILED;
- int k_bits;
- BIGNUM *m = mpi_to_bn(_m);
- BIGNUM *p = mpi_to_bn(pk->pub.elg.p);
- BIGNUM *g = mpi_to_bn(pk->pub.elg.g);
- BIGNUM *y = mpi_to_bn(pk->pub.elg.y);
- BIGNUM *k = BN_new();
- BIGNUM *yk = BN_new();
- BIGNUM *c1 = BN_new();
- BIGNUM *c2 = BN_new();
- BN_CTX *tmp = BN_CTX_new();
-
- if (!m || !p || !g || !y || !k || !yk || !c1 || !c2 || !tmp)
- goto err;
-
- /*
- * generate k
- */
- k_bits = decide_k_bits(BN_num_bits(p));
- if (!BN_rand(k, k_bits, 0, 0))
- goto err;
-
- /*
- * c1 = g^k c2 = m * y^k
- */
- if (!BN_mod_exp(c1, g, k, p, tmp))
- goto err;
- if (!BN_mod_exp(yk, y, k, p, tmp))
- goto err;
- if (!BN_mod_mul(c2, m, yk, p, tmp))
- goto err;
-
- /* result */
- *c1_p = bn_to_mpi(c1);
- *c2_p = bn_to_mpi(c2);
- if (*c1_p && *c2_p)
- res = 0;
-err:
- if (tmp)
- BN_CTX_free(tmp);
- if (c2)
- BN_clear_free(c2);
- if (c1)
- BN_clear_free(c1);
- if (yk)
- BN_clear_free(yk);
- if (k)
- BN_clear_free(k);
- if (y)
- BN_clear_free(y);
- if (g)
- BN_clear_free(g);
- if (p)
- BN_clear_free(p);
- if (m)
- BN_clear_free(m);
- return res;
-}
-
-int
-pgp_elgamal_decrypt(PGP_PubKey *pk, PGP_MPI *_c1, PGP_MPI *_c2,
- PGP_MPI **msg_p)
-{
- int res = PXE_PGP_MATH_FAILED;
- BIGNUM *c1 = mpi_to_bn(_c1);
- BIGNUM *c2 = mpi_to_bn(_c2);
- BIGNUM *p = mpi_to_bn(pk->pub.elg.p);
- BIGNUM *x = mpi_to_bn(pk->sec.elg.x);
- BIGNUM *c1x = BN_new();
- BIGNUM *div = BN_new();
- BIGNUM *m = BN_new();
- BN_CTX *tmp = BN_CTX_new();
-
- if (!c1 || !c2 || !p || !x || !c1x || !div || !m || !tmp)
- goto err;
-
- /*
- * m = c2 / (c1^x)
- */
- if (!BN_mod_exp(c1x, c1, x, p, tmp))
- goto err;
- if (!BN_mod_inverse(div, c1x, p, tmp))
- goto err;
- if (!BN_mod_mul(m, c2, div, p, tmp))
- goto err;
-
- /* result */
- *msg_p = bn_to_mpi(m);
- if (*msg_p)
- res = 0;
-err:
- if (tmp)
- BN_CTX_free(tmp);
- if (m)
- BN_clear_free(m);
- if (div)
- BN_clear_free(div);
- if (c1x)
- BN_clear_free(c1x);
- if (x)
- BN_clear_free(x);
- if (p)
- BN_clear_free(p);
- if (c2)
- BN_clear_free(c2);
- if (c1)
- BN_clear_free(c1);
- return res;
-}
-
-int
-pgp_rsa_encrypt(PGP_PubKey *pk, PGP_MPI *_m, PGP_MPI **c_p)
-{
- int res = PXE_PGP_MATH_FAILED;
- BIGNUM *m = mpi_to_bn(_m);
- BIGNUM *e = mpi_to_bn(pk->pub.rsa.e);
- BIGNUM *n = mpi_to_bn(pk->pub.rsa.n);
- BIGNUM *c = BN_new();
- BN_CTX *tmp = BN_CTX_new();
-
- if (!m || !e || !n || !c || !tmp)
- goto err;
-
- /*
- * c = m ^ e
- */
- if (!BN_mod_exp(c, m, e, n, tmp))
- goto err;
-
- *c_p = bn_to_mpi(c);
- if (*c_p)
- res = 0;
-err:
- if (tmp)
- BN_CTX_free(tmp);
- if (c)
- BN_clear_free(c);
- if (n)
- BN_clear_free(n);
- if (e)
- BN_clear_free(e);
- if (m)
- BN_clear_free(m);
- return res;
-}
-
-int
-pgp_rsa_decrypt(PGP_PubKey *pk, PGP_MPI *_c, PGP_MPI **m_p)
-{
- int res = PXE_PGP_MATH_FAILED;
- BIGNUM *c = mpi_to_bn(_c);
- BIGNUM *d = mpi_to_bn(pk->sec.rsa.d);
- BIGNUM *n = mpi_to_bn(pk->pub.rsa.n);
- BIGNUM *m = BN_new();
- BN_CTX *tmp = BN_CTX_new();
-
- if (!m || !d || !n || !c || !tmp)
- goto err;
-
- /*
- * m = c ^ d
- */
- if (!BN_mod_exp(m, c, d, n, tmp))
- goto err;
-
- *m_p = bn_to_mpi(m);
- if (*m_p)
- res = 0;
-err:
- if (tmp)
- BN_CTX_free(tmp);
- if (m)
- BN_clear_free(m);
- if (n)
- BN_clear_free(n);
- if (d)
- BN_clear_free(d);
- if (c)
- BN_clear_free(c);
- return res;
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/pgp-mpi.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/pgp-mpi.c b/contrib/pgcrypto/pgp-mpi.c
deleted file mode 100644
index 3f2ec0f..0000000
--- a/contrib/pgcrypto/pgp-mpi.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * pgp-mpi.c
- * OpenPGP MPI helper functions.
- *
- * Copyright (c) 2005 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/pgp-mpi.c,v 1.5 2009/06/11 14:48:52 momjian Exp $
- */
-#include "postgres.h"
-
-#include "px.h"
-#include "mbuf.h"
-#include "pgp.h"
-
-int
-pgp_mpi_alloc(int bits, PGP_MPI **mpi)
-{
- PGP_MPI *n;
- int len = (bits + 7) / 8;
-
- if (bits < 0 || bits > 0xFFFF)
- {
- px_debug("pgp_mpi_alloc: unreasonable request: bits=%d", bits);
- return PXE_PGP_CORRUPT_DATA;
- }
- n = px_alloc(sizeof(*n) + len);
- n->bits = bits;
- n->bytes = len;
- n->data = (uint8 *) (n) + sizeof(*n);
- *mpi = n;
- return 0;
-}
-
-int
-pgp_mpi_create(uint8 *data, int bits, PGP_MPI **mpi)
-{
- int res;
- PGP_MPI *n;
-
- res = pgp_mpi_alloc(bits, &n);
- if (res < 0)
- return res;
- memcpy(n->data, data, n->bytes);
- *mpi = n;
- return 0;
-}
-
-int
-pgp_mpi_free(PGP_MPI *mpi)
-{
- if (mpi == NULL)
- return 0;
- memset(mpi, 0, sizeof(*mpi) + mpi->bytes);
- px_free(mpi);
- return 0;
-}
-
-int
-pgp_mpi_read(PullFilter *src, PGP_MPI **mpi)
-{
- int res;
- uint8 hdr[2];
- int bits;
- PGP_MPI *n;
-
- res = pullf_read_fixed(src, 2, hdr);
- if (res < 0)
- return res;
- bits = ((unsigned) hdr[0] << 8) + hdr[1];
-
- res = pgp_mpi_alloc(bits, &n);
- if (res < 0)
- return res;
-
- res = pullf_read_fixed(src, n->bytes, n->data);
- if (res < 0)
- pgp_mpi_free(n);
- else
- *mpi = n;
- return res;
-}
-
-int
-pgp_mpi_write(PushFilter *dst, PGP_MPI *n)
-{
- int res;
- uint8 buf[2];
-
- buf[0] = n->bits >> 8;
- buf[1] = n->bits & 0xFF;
- res = pushf_write(dst, buf, 2);
- if (res >= 0)
- res = pushf_write(dst, n->data, n->bytes);
- return res;
-}
-
-int
-pgp_mpi_hash(PX_MD *md, PGP_MPI *n)
-{
- uint8 buf[2];
-
- buf[0] = n->bits >> 8;
- buf[1] = n->bits & 0xFF;
- px_md_update(md, buf, 2);
- px_md_update(md, n->data, n->bytes);
-
- return 0;
-}
-
-unsigned
-pgp_mpi_cksum(unsigned cksum, PGP_MPI *n)
-{
- int i;
-
- cksum += n->bits >> 8;
- cksum += n->bits & 0xFF;
- for (i = 0; i < n->bytes; i++)
- cksum += n->data[i];
-
- return cksum & 0xFFFF;
-}
[09/11] incubator-hawq git commit: HAWQ-394. Remove pgcrypto from
code base
Posted by hu...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/pgp-pubkey-decrypt.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/pgp-pubkey-decrypt.out b/contrib/pgcrypto/expected/pgp-pubkey-decrypt.out
deleted file mode 100755
index 7d16a43..0000000
--- a/contrib/pgcrypto/expected/pgp-pubkey-decrypt.out
+++ /dev/null
@@ -1,555 +0,0 @@
---
--- PGP Public Key Encryption
---
--- As most of the low-level stuff is tested in symmetric key
--- tests, here's only public-key specific tests
-create table keytbl (
- id int4,
- name text,
- pubkey text,
- seckey text
-);
-create table encdata (
- id int4,
- data text
-);
-insert into keytbl (id, name, pubkey, seckey)
-values (1, 'elg1024', '
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-mQGiBELIIUgRBACp401L6jXrLB28c3YA4sM3OJKnxM1GT9YTkWyE3Vyte65H8WU9
-tGPBX7OMuaX5eGZ84LFUGvaP0k7anfmXcDkCO3P9GgL+ro/dS2Ps/vChQPZqHaxE
-xpKDUt47B7DGdRJrC8DRnIR4wbSyQA6ma3S1yFqC5pJhSs+mqf9eExOjiwCgntth
-klRxIYw352ZX9Ov9oht/p/ED/1Xi4PS+tkXVvyIw5aZfa61bT6XvDkoPI0Aj3GE5
-YmCHJlKA/IhEr8QJOLV++5VEv4l6KQ1/DFoJzoNdr1AGJukgTc6X/WcQRzfQtUic
-PHQme5oAWoHa6bVQZOwvbJh3mOXDq/Tk/KF22go8maM44vMn4bvv+SBbslviYLiL
-jZJ1A/9JXF1esNq+X9HehJyqHHU7LEEf/ck6zC7o2erM3/LZlZuLNPD2cv3oL3Nv
-saEgcTSZl+8XmO8pLmzjKIb+hi70qVx3t2IhMqbb4B/dMY1Ck62gPBKa81/Wwi7v
-IsEBQLEtyBmGmI64YpzoRNFeaaF9JY+sAKqROqe6dLjJ7vebQLQfRWxnYW1hbCAx
-MDI0IDx0ZXN0QGV4YW1wbGUub3JnPoheBBMRAgAeBQJCyCFIAhsDBgsJCAcDAgMV
-AgMDFgIBAh4BAheAAAoJEBwpvA0YF3NkOtsAniI9W2bC3CxARTpYrev7ihreDzFc
-AJ9WYLQxDQAi5Ec9AQoodPkIagzZ4LkBDQRCyCFKEAQAh5SNbbJMAsJ+sQbcWEzd
-ku8AdYB5zY7Qyf9EOvn0g39bzANhxmmb6gbRlQN0ioymlDwraTKUAfuCZgNcg/0P
-sxFGb9nDcvjIV8qdVpnq1PuzMFuBbmGI6weg7Pj01dlPiO0wt1lLX+SubktqbYxI
-+h31c3RDZqxj+KAgxR8YNGMAAwYD+wQs2He1Z5+p4OSgMERiNzF0acZUYmc0e+/9
-6gfL0ft3IP+SSFo6hEBrkKVhZKoPSSRr5KpNaEobhdxsnKjUaw/qyoaFcNMzb4sF
-k8wq5UlCkR+h72u6hv8FuleCV8SJUT1U2JjtlXJR2Pey9ifh8rZfu57UbdwdHa0v
-iWc4DilhiEkEGBECAAkFAkLIIUoCGwwACgkQHCm8DRgXc2TtrwCfdPom+HlNVE9F
-ig3hGY1Rb4NEk1gAn1u9IuQB+BgDP40YHHz6bKWS/x80
-=RWci
------END PGP PUBLIC KEY BLOCK-----
-', '
------BEGIN PGP PRIVATE KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-lQG7BELIIUgRBACp401L6jXrLB28c3YA4sM3OJKnxM1GT9YTkWyE3Vyte65H8WU9
-tGPBX7OMuaX5eGZ84LFUGvaP0k7anfmXcDkCO3P9GgL+ro/dS2Ps/vChQPZqHaxE
-xpKDUt47B7DGdRJrC8DRnIR4wbSyQA6ma3S1yFqC5pJhSs+mqf9eExOjiwCgntth
-klRxIYw352ZX9Ov9oht/p/ED/1Xi4PS+tkXVvyIw5aZfa61bT6XvDkoPI0Aj3GE5
-YmCHJlKA/IhEr8QJOLV++5VEv4l6KQ1/DFoJzoNdr1AGJukgTc6X/WcQRzfQtUic
-PHQme5oAWoHa6bVQZOwvbJh3mOXDq/Tk/KF22go8maM44vMn4bvv+SBbslviYLiL
-jZJ1A/9JXF1esNq+X9HehJyqHHU7LEEf/ck6zC7o2erM3/LZlZuLNPD2cv3oL3Nv
-saEgcTSZl+8XmO8pLmzjKIb+hi70qVx3t2IhMqbb4B/dMY1Ck62gPBKa81/Wwi7v
-IsEBQLEtyBmGmI64YpzoRNFeaaF9JY+sAKqROqe6dLjJ7vebQAAAnj4i4st+s+C6
-WKTIDcL1Iy0Saq8lCp60H0VsZ2FtYWwgMTAyNCA8dGVzdEBleGFtcGxlLm9yZz6I
-XgQTEQIAHgUCQsghSAIbAwYLCQgHAwIDFQIDAxYCAQIeAQIXgAAKCRAcKbwNGBdz
-ZDrbAJ9cp6AsjOhiLxwznsMJheGf4xkH8wCfUPjMCLm4tAEnyYn2hDNt7CB8B6Kd
-ATEEQsghShAEAIeUjW2yTALCfrEG3FhM3ZLvAHWAec2O0Mn/RDr59IN/W8wDYcZp
-m+oG0ZUDdIqMppQ8K2kylAH7gmYDXIP9D7MRRm/Zw3L4yFfKnVaZ6tT7szBbgW5h
-iOsHoOz49NXZT4jtMLdZS1/krm5Lam2MSPod9XN0Q2asY/igIMUfGDRjAAMGA/sE
-LNh3tWefqeDkoDBEYjcxdGnGVGJnNHvv/eoHy9H7dyD/kkhaOoRAa5ClYWSqD0kk
-a+SqTWhKG4XcbJyo1GsP6sqGhXDTM2+LBZPMKuVJQpEfoe9ruob/BbpXglfEiVE9
-VNiY7ZVyUdj3svYn4fK2X7ue1G3cHR2tL4lnOA4pYQAA9030E4u2ZKOfJBpUM+EM
-m9VmsGjaQZV4teB0R/q3W8sRIYhJBBgRAgAJBQJCyCFKAhsMAAoJEBwpvA0YF3Nk
-7a8AniFFotw1x2X+oryu3Q3nNtmxoKHpAJ9HU7jw7ydg33dI9J8gVkrmsSZ2/w==
-=nvqq
------END PGP PRIVATE KEY BLOCK-----
-');
-insert into keytbl (id, name, pubkey, seckey)
-values (2, 'elg2048', '
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-mQGiBELIIgoRBAC1onBpxKYgDvrgCaUWPY34947X3ogxGOfCN0p6Eqrx+2PUhm4n
-vFvmczpMT4iDc0mUO+iwnwsEkXQI1eC99g8c0jnZAvzJZ5miAHL8hukMAMfDkYke
-5aVvcPPc8uPDlItpszGmH0rM0V9TIt/i9QEXetpyNWhk4jj5qnohYhLeZwCgkOdO
-RFAdNi4vfFPivvtAp2ffjU8D/R3x/UJCvkzi7i9rQHGo313xxmQu5BuqIjANBUij
-8IE7LRPI/Qhg2hYy3sTJwImDi7VkS+fuvNVk0d6MTWplAXYU96bn12JaD21R9sKl
-Fzcc+0iZI1wYA1PczisUkoTISE+dQFUsoGHfpDLhoBuesXQrhBavI8t8VPd+nkdt
-J+oKA/9iRQ87FzxdYTkh2drrv69FZHc3Frsjw9nPcBq/voAvXH0MRilqyCg7HpW/
-T9naeOERksa+Rj4R57IF1l4e5oiiGJo9QmaKZcsCsXrREJCycrlEtMqXfSPy+bi5
-0yDZE/Qm1dwu13+OXOsRvkoNYjO8Mzo9K8wU12hMqN0a2bu6a7QjRWxnYW1hbCAy
-MDQ4IDx0ZXN0MjA0OEBleGFtcGxlLm9yZz6IXgQTEQIAHgUCQsgiCgIbAwYLCQgH
-AwIDFQIDAxYCAQIeAQIXgAAKCRBI6c1W/qZo29PDAKCG724enIxRog1j+aeCp/uq
-or6mbwCePuKy2/1kD1FvnhkZ/R5fpm+pdm25Ag0EQsgiIhAIAJI3Gb2Ehtz1taQ9
-AhPY4Avad2BsqD3S5X/R11Cm0KBE/04D29dxn3f8QfxDsexYvNIZjoJPBqqZ7iMX
-MhoWyw8ZF5Zs1mLIjFGVorePrm94N3MNPWM7x9M36bHUjx0vCZKFIhcGY1g+htE/
-QweaJzNVeA5z4qZmik41FbQyQSyHa3bOkTZu++/U6ghP+iDp5UDBjMTkVyqITUVN
-gC+MR+da/I60irBVhue7younh4ovF+CrVDQJC06HZl6CAJJyA81SmRfi+dmKbbjZ
-LF6rhz0norPjISJvkIqvdtM4VPBKI5wpgwCzpEqjuiKrAVujRT68zvBvJ4aVqb11
-k5QdJscAAwUH/jVJh0HbWAoiFTe+NvohfrA8vPcD0rtU3Y+siiqrabotnxJd2NuC
-bxghJYGfNtnx0KDjFbCRKJVeTFok4UnuVYhXdH/c6i0/rCTNdeW2D6pmR4GfBozR
-Pw/ARf+jONawGLyUj7uq13iquwMSE7VyNuF3ycL2OxXjgOWMjkH8c+zfHHpjaZ0R
-QsetMq/iNBWraayKZnWUd+eQqNzE+NUo7w1jAu7oDpy+8a1eipxzK+O0HfU5LTiF
-Z1Oe4Um0P2l3Xtx8nEgj4vSeoEkl2qunfGW00ZMMTCWabg0ZgxPzMfMeIcm6525A
-Yn2qL+X/qBJTInAl7/hgPz2D1Yd7d5/RdWaISQQYEQIACQUCQsgiIgIbDAAKCRBI
-6c1W/qZo25ZSAJ98WTrtl2HiX8ZqZq95v1+9cHtZPQCfZDoWQPybkNescLmXC7q5
-1kNTmEU=
-=8QM5
------END PGP PUBLIC KEY BLOCK-----
-', '
------BEGIN PGP PRIVATE KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-lQG7BELIIgoRBAC1onBpxKYgDvrgCaUWPY34947X3ogxGOfCN0p6Eqrx+2PUhm4n
-vFvmczpMT4iDc0mUO+iwnwsEkXQI1eC99g8c0jnZAvzJZ5miAHL8hukMAMfDkYke
-5aVvcPPc8uPDlItpszGmH0rM0V9TIt/i9QEXetpyNWhk4jj5qnohYhLeZwCgkOdO
-RFAdNi4vfFPivvtAp2ffjU8D/R3x/UJCvkzi7i9rQHGo313xxmQu5BuqIjANBUij
-8IE7LRPI/Qhg2hYy3sTJwImDi7VkS+fuvNVk0d6MTWplAXYU96bn12JaD21R9sKl
-Fzcc+0iZI1wYA1PczisUkoTISE+dQFUsoGHfpDLhoBuesXQrhBavI8t8VPd+nkdt
-J+oKA/9iRQ87FzxdYTkh2drrv69FZHc3Frsjw9nPcBq/voAvXH0MRilqyCg7HpW/
-T9naeOERksa+Rj4R57IF1l4e5oiiGJo9QmaKZcsCsXrREJCycrlEtMqXfSPy+bi5
-0yDZE/Qm1dwu13+OXOsRvkoNYjO8Mzo9K8wU12hMqN0a2bu6awAAn2F+iNBElfJS
-8azqO/kEiIfpqu6/DQG0I0VsZ2FtYWwgMjA0OCA8dGVzdDIwNDhAZXhhbXBsZS5v
-cmc+iF0EExECAB4FAkLIIgoCGwMGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQSOnN
-Vv6maNvTwwCYkpcJmpl3aHCQdGomz7dFohDgjgCgiThZt2xTEi6GhBB1vuhk+f55
-n3+dAj0EQsgiIhAIAJI3Gb2Ehtz1taQ9AhPY4Avad2BsqD3S5X/R11Cm0KBE/04D
-29dxn3f8QfxDsexYvNIZjoJPBqqZ7iMXMhoWyw8ZF5Zs1mLIjFGVorePrm94N3MN
-PWM7x9M36bHUjx0vCZKFIhcGY1g+htE/QweaJzNVeA5z4qZmik41FbQyQSyHa3bO
-kTZu++/U6ghP+iDp5UDBjMTkVyqITUVNgC+MR+da/I60irBVhue7younh4ovF+Cr
-VDQJC06HZl6CAJJyA81SmRfi+dmKbbjZLF6rhz0norPjISJvkIqvdtM4VPBKI5wp
-gwCzpEqjuiKrAVujRT68zvBvJ4aVqb11k5QdJscAAwUH/jVJh0HbWAoiFTe+Nvoh
-frA8vPcD0rtU3Y+siiqrabotnxJd2NuCbxghJYGfNtnx0KDjFbCRKJVeTFok4Unu
-VYhXdH/c6i0/rCTNdeW2D6pmR4GfBozRPw/ARf+jONawGLyUj7uq13iquwMSE7Vy
-NuF3ycL2OxXjgOWMjkH8c+zfHHpjaZ0RQsetMq/iNBWraayKZnWUd+eQqNzE+NUo
-7w1jAu7oDpy+8a1eipxzK+O0HfU5LTiFZ1Oe4Um0P2l3Xtx8nEgj4vSeoEkl2qun
-fGW00ZMMTCWabg0ZgxPzMfMeIcm6525AYn2qL+X/qBJTInAl7/hgPz2D1Yd7d5/R
-dWYAAVQKFPXbRaxbdArwRVXMzSD3qj/+VwwhwEDt8zmBGnlBfwVdkjQQrDUMmV1S
-EwyISQQYEQIACQUCQsgiIgIbDAAKCRBI6c1W/qZo25ZSAJ4sgUfHTVsG/x3p3fcM
-3b5R86qKEACggYKSwPWCs0YVRHOWqZY0pnHtLH8=
-=3Dgk
------END PGP PRIVATE KEY BLOCK-----
-');
-insert into keytbl (id, name, pubkey, seckey)
-values (3, 'elg4096', '
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-mQGiBELII7wRBACFuaAvb11cIvjJK9LkZr4cYuYhLWh3DJdojNNnLNiym5OEksvY
-05cw8OgqKtPzICU7o/mHXTWhzJYUt3i50/AeYygI8Q0uATS6RnDAKNlES1EMoHKz
-2a5iFbYs4bm4IwlkvYd8uWjcu+U0YLbxir39u+anIc6eT+q3WiH/q3zDRwCgkT98
-cnIG8iO8PdwDSP8G4Lt6TYED/R45GvCzJ4onQALLE92KkLUz8aFWSl05r84kczEN
-SxiP9Ss6m465RmwWHfwYAu4b+c4GeNyU8fIU2EM8cezchC+edEi3xu1s+pCV0Dk4
-18DGC8WKCICO30vBynuNmYg7W/7Zd4wtjss454fMW7+idVDNM701mmXBtI1nsBtG
-7Z4tA/9FxjFbJK9jh24RewfjHpLYqcfCo2SsUjOwsnMZ5yg2yv9KyVVQhRqwmrqt
-q8MRyjGmfoD9PPdCgvqgzy0hHvAHUtTm2zUczGTG+0g4hNIklxC/Mv6J4KE+NWTh
-uB4acqofHyaw2WnKOuRUsoDi6rG5AyjNMyAK/vVcEGj7J1tk27QjRWxnYW1hbCA0
-MDk2IDx0ZXN0NDA5NkBleGFtcGxlLm9yZz6IXgQTEQIAHgUCQsgjvAIbAwYLCQgH
-AwIDFQIDAxYCAQIeAQIXgAAKCRBj+HX2P2d0oAEDAJ9lI+CNmb42z3+a6TnVusM6
-FI7oLwCfUwA1zEcRdsT3nIkoYh0iKxFSDFW5BA0EQsgkdhAQAJQbLXlgcJ/jq+Xh
-Eujb77/eeftFJObNIRYD9fmJ7HFIXbUcknEpbs+cRH/nrj5dGSY3OT3jCXOUtvec
-sCoX/CpZWL0oqDjAiZtNSFiulw5Gav4gHYkWKgKdSo+2rkavEPqKIVHvMeXaJtGT
-d7v/AmL/P8T7gls93o5WFBOLtPbDvWqaKRy2U5TAhl1laiM0vGALRVjvSCgnGw9g
-FpSnXbO3AfenUSjDzZujfGLHtU44ixHSS/D4DepiF3YaYLsN4CBqZRv6FbMZD5W3
-DnJY4kS1kH0MzdcF19TlcZ3itTCcGIt1tMKf84mccPoqdMzH7vumBGTeFEly5Afp
-9berJcirqh2fzlunN0GS02z6SGWnjTbDlkNDxuxPSBbpcpNyD3jpYAUqSwRsZ/+5
-zkzcbGtDmvy9sJ5lAXkxGoIoQ1tEVX/LOHnh2NQHK8ourVOnr7MS0nozssITZJ5E
-XqtHiREjiYEuPyZiVZKJHLWuYYaF+n40znnz3sJuXFRreHhHbbvRdlYUU5mJV+XZ
-BLgKuS33NdpGeMIngnCc/9IQ6OZb6ixc94kbkd3w2PVr8CbKlu/IHTjWOO2mAo+D
-+OydlYl23FiM3KOyMP1HcEOJMB/nwkMtrvd+522Lu9n77ktKfot9IPrQDIQTyXjR
-3pCOFtCOBnk2tJHMPoG9jn9ah/LHAAMHEACDZ5I/MHGfmiKg2hrmqBu2J2j/deC8
-CpwcyDH1ovQ0gHvb9ESa+CVRU2Wdy2CD7Q9SmtMverB5eneL418iPVRcQdwRmQ2y
-IH4udlBa6ce9HTUCaecAZ4/tYBnaC0Av/9l9tz14eYcwRMDpB+bnkhgF+PZ1KAfD
-9wcY2aHbtsf3lZBc5h4owPJkxpe/BNzuJxW3q4VpSbLsZhwnCZ2wg7DRwP44wFIk
-00ptmoBY59gsU6I40XtzrF8JDr0cA57xND5RY21Z8lnnYRE1Tc8h5REps9ZIxW3/
-yl91404bPLqxczpUHQAMSTAmBaStPYX1nS51uofOhLs5SKPCUmxfGKIOhsD0oLUn
-78DnkONVGeXzBibSwwtbgfMzee4G8wSUfJ7w8WXz1TyanaGLnJ+DuKASSOrFoBCD
-HEDuWZWgSL74NOQupFRk0gxOPmqU94Y8HziQWma/cETbmD83q8rxN+GM2oBxQkQG
-xcbqMTHE7aVhV3tymbSWVaYhww3oIwsZS9oUIi1DnPEowS6CpVRrwdvLjLJnJzzV
-O3AFPn9eZ1Q7R1tNx+zZ4OOfhvI/OlRJ3HBx2L53embkbdY9gFYCCdTjPyjKoDIx
-kALgCajjCYMNUsAKNSd6mMCQ8TtvukSzkZS1RGKP27ohsdnzIVsiEAbxDMMcI4k1
-ul0LExUTCXSjeIhJBBgRAgAJBQJCyCR2AhsMAAoJEGP4dfY/Z3Sg19sAn0NDS8pb
-qrMpQAxSb7zRTmcXEFd9AJ435H0ttP/NhLHXC9ezgbCMmpXMOQ==
-=kRxT
------END PGP PUBLIC KEY BLOCK-----
-', '
------BEGIN PGP PRIVATE KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-lQG7BELII7wRBACFuaAvb11cIvjJK9LkZr4cYuYhLWh3DJdojNNnLNiym5OEksvY
-05cw8OgqKtPzICU7o/mHXTWhzJYUt3i50/AeYygI8Q0uATS6RnDAKNlES1EMoHKz
-2a5iFbYs4bm4IwlkvYd8uWjcu+U0YLbxir39u+anIc6eT+q3WiH/q3zDRwCgkT98
-cnIG8iO8PdwDSP8G4Lt6TYED/R45GvCzJ4onQALLE92KkLUz8aFWSl05r84kczEN
-SxiP9Ss6m465RmwWHfwYAu4b+c4GeNyU8fIU2EM8cezchC+edEi3xu1s+pCV0Dk4
-18DGC8WKCICO30vBynuNmYg7W/7Zd4wtjss454fMW7+idVDNM701mmXBtI1nsBtG
-7Z4tA/9FxjFbJK9jh24RewfjHpLYqcfCo2SsUjOwsnMZ5yg2yv9KyVVQhRqwmrqt
-q8MRyjGmfoD9PPdCgvqgzy0hHvAHUtTm2zUczGTG+0g4hNIklxC/Mv6J4KE+NWTh
-uB4acqofHyaw2WnKOuRUsoDi6rG5AyjNMyAK/vVcEGj7J1tk2wAAoJCUNy6awTkw
-XfbLbpqh0fvDst7jDLa0I0VsZ2FtYWwgNDA5NiA8dGVzdDQwOTZAZXhhbXBsZS5v
-cmc+iF4EExECAB4FAkLII7wCGwMGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQY/h1
-9j9ndKABAwCeNEOVK87EzXYbtxYBsnjrUI948NIAn2+f3BXiBFDV5NvqPwIZ0m77
-Fwy4nQRMBELIJHYQEACUGy15YHCf46vl4RLo2++/3nn7RSTmzSEWA/X5iexxSF21
-HJJxKW7PnER/564+XRkmNzk94wlzlLb3nLAqF/wqWVi9KKg4wImbTUhYrpcORmr+
-IB2JFioCnUqPtq5GrxD6iiFR7zHl2ibRk3e7/wJi/z/E+4JbPd6OVhQTi7T2w71q
-mikctlOUwIZdZWojNLxgC0VY70goJxsPYBaUp12ztwH3p1Eow82bo3xix7VOOIsR
-0kvw+A3qYhd2GmC7DeAgamUb+hWzGQ+Vtw5yWOJEtZB9DM3XBdfU5XGd4rUwnBiL
-dbTCn/OJnHD6KnTMx+77pgRk3hRJcuQH6fW3qyXIq6odn85bpzdBktNs+khlp402
-w5ZDQ8bsT0gW6XKTcg946WAFKksEbGf/uc5M3GxrQ5r8vbCeZQF5MRqCKENbRFV/
-yzh54djUByvKLq1Tp6+zEtJ6M7LCE2SeRF6rR4kRI4mBLj8mYlWSiRy1rmGGhfp+
-NM55897CblxUa3h4R2270XZWFFOZiVfl2QS4Crkt9zXaRnjCJ4JwnP/SEOjmW+os
-XPeJG5Hd8Nj1a/AmypbvyB041jjtpgKPg/jsnZWJdtxYjNyjsjD9R3BDiTAf58JD
-La73fudti7vZ++5LSn6LfSD60AyEE8l40d6QjhbQjgZ5NrSRzD6BvY5/WofyxwAD
-BxAAg2eSPzBxn5oioNoa5qgbtido/3XgvAqcHMgx9aL0NIB72/REmvglUVNlnctg
-g+0PUprTL3qweXp3i+NfIj1UXEHcEZkNsiB+LnZQWunHvR01AmnnAGeP7WAZ2gtA
-L//Zfbc9eHmHMETA6Qfm55IYBfj2dSgHw/cHGNmh27bH95WQXOYeKMDyZMaXvwTc
-7icVt6uFaUmy7GYcJwmdsIOw0cD+OMBSJNNKbZqAWOfYLFOiONF7c6xfCQ69HAOe
-8TQ+UWNtWfJZ52ERNU3PIeURKbPWSMVt/8pfdeNOGzy6sXM6VB0ADEkwJgWkrT2F
-9Z0udbqHzoS7OUijwlJsXxiiDobA9KC1J+/A55DjVRnl8wYm0sMLW4HzM3nuBvME
-lHye8PFl89U8mp2hi5yfg7igEkjqxaAQgxxA7lmVoEi++DTkLqRUZNIMTj5qlPeG
-PB84kFpmv3BE25g/N6vK8TfhjNqAcUJEBsXG6jExxO2lYVd7cpm0llWmIcMN6CML
-GUvaFCItQ5zxKMEugqVUa8Hby4yyZyc81TtwBT5/XmdUO0dbTcfs2eDjn4byPzpU
-Sdxwcdi+d3pm5G3WPYBWAgnU4z8oyqAyMZAC4Amo4wmDDVLACjUnepjAkPE7b7pE
-s5GUtURij9u6IbHZ8yFbIhAG8QzDHCOJNbpdCxMVEwl0o3gAAckBdfKuasiNUn5G
-L5XRnSvaOFzftr8zteOlZChCSNvzH5k+i1j7RJbWq06OeKRywPzjfjgM2MvRzI43
-ICeISQQYEQIACQUCQsgkdgIbDAAKCRBj+HX2P2d0oNfbAJ9+G3SeXrk+dWwo9EGi
-hqMi2GVTsgCfeoQJPsc8FLYUgfymc/3xqAVLUtg=
-=Gjq6
------END PGP PRIVATE KEY BLOCK-----
-');
-insert into keytbl (id, name, pubkey, seckey)
-values (4, 'rsa2048', '
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-mQELBELIJbEBCADAIdtcoLAmQfl8pb73pPRuEYx8qW9klLfCGG5A4OUOi00JHNwP
-ZaABe1PGzjoeXrgM1MTQZhoZu1Vdg+KDI6XAtiy9P6bLg7ntsXksD4wBoIKtQKc2
-55pdukxTiu+xeJJG2q8ZZPOp97CV9fbQ9vPCwgnuSsDCoQlibZikDVPAyVTvp7Jx
-5rz8yXsl4sxvaeMZPqqFPtA/ENeQ3cpsyR1BQXSvoZpH1Fq0b8GcZTEdWWD/w6/K
-MCRC8TmgEd+z3e8kIsCwFQ+TSHbCcxRWdgZE7gE31sJHHVkrZlXtLU8MPXWqslVz
-R0cX+yC8j6bXI6/BqZ2SvRndJwuunRAr4um7AAYptB5SU0EgMjA0OCA8cnNhMjA0
-OEBleGFtcGxlLm9yZz6JATQEEwECAB4FAkLIJbECGwMGCwkIBwMCAxUCAwMWAgEC
-HgECF4AACgkQnc+OnJvTHyQqHwf8DtzuAGmObfe3ggtn14x2wnU1Nigebe1K5liR
-nrLuVlLBpdO6CWmMUzfKRvyZlx54GlA9uUQSjW+RlgejdOTQqesDrcTEukYd4yzw
-bLZyM5Gb3lsE/FEmE7Dxw/0Utf59uACqzG8LACQn9J6sEgZWKxAupuYTHXd12lDP
-D3dnU4uzKPhMcjnSN00pzjusP7C9NZd3OLkAx2vw/dmb4Q+/QxeZhVYYsAUuR2hv
-9bgGWopumlOkt8Zu5YG6+CtTbJXprPI7pJ1jHbeE+q/29hWJQtS8Abx82AcOkzhv
-S3NZKoJ/1DrGgoDAu1mGkM4KvLAxfDs/qQ9dZhtEmDbKPLTVEA==
-=lR4n
------END PGP PUBLIC KEY BLOCK-----
-', '
------BEGIN PGP PRIVATE KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-lQOWBELIJbEBCADAIdtcoLAmQfl8pb73pPRuEYx8qW9klLfCGG5A4OUOi00JHNwP
-ZaABe1PGzjoeXrgM1MTQZhoZu1Vdg+KDI6XAtiy9P6bLg7ntsXksD4wBoIKtQKc2
-55pdukxTiu+xeJJG2q8ZZPOp97CV9fbQ9vPCwgnuSsDCoQlibZikDVPAyVTvp7Jx
-5rz8yXsl4sxvaeMZPqqFPtA/ENeQ3cpsyR1BQXSvoZpH1Fq0b8GcZTEdWWD/w6/K
-MCRC8TmgEd+z3e8kIsCwFQ+TSHbCcxRWdgZE7gE31sJHHVkrZlXtLU8MPXWqslVz
-R0cX+yC8j6bXI6/BqZ2SvRndJwuunRAr4um7AAYpAAf/QZsrrz0c7dgWwGqMIpw6
-fP+/lLa74+fa2CFRWtYowEiKsfDg/wN7Ua07036dNhPa8aZPsU6SRzm5PybKOURe
-D9pNt0FxJkX0j5pCWfjSJgTbc1rCdqZ/oyBk/U6pQtf//zfw3PbDl7I8TC6GOt2w
-5NgcXdsWHP7LAmPctOVUyzFsenevR0MFTHkMbmKI1HpFm8XN/e1Fl+qIAD+OagTF
-5B32VvpoJtkh5nxnIuToNJsa9Iy7F9MM2CeFOyTMihMcjXKBBUaAYoF115irBvqu
-7N/qWmzqLg8yxBZ56mh6meCF3+67VA2y7fL8rhw2QuqgLg1JFlKAVL+9crCSrn//
-GQQA1kT7FytW6BNOffblFYZkrJer3icoRDqa/ljgH/yVaWoVT1igy0E9XzYO7MwP
-2usj/resLy0NC1qCthk51cZ/wthooMl88e5Wb4l5FYwBEac7muSBTo4W8cAH1hFj
-TWL6XAGvEzGX3Mt9pn8uYGlQLZAhJoNCAU2EOCbN1PchDvsEAOWNKYesuUVk8+sQ
-St0NDNhd9BWtTWTHkCZb1dKC3JTfr9PqkTBLrWFbYjkOtvdPAW7FDaXXXZfdH1jH
-WfwP3Q+I6sqgSaWpCS4dBAns3/RVtO7czVgyIwma04iIvJqderYrfvkUq95KfwP2
-V8wXkhrPPPxyrg5y3wQlpY2jb5RBBAC17SK1ms+DBtck4vpdjp3SJ32SbyC/DU30
-89Q12j74S7Zdu1qZlKnvy3kWPYX/hMuSzGZ+mLVJNFEqH2X01aFzppYz0hdI9PGB
-9tTFEqZWQL9ZkXfjc79Cgnt12pNukRbtw0N/kyutOdIFHVT79wVAd+powqziXJsC
-Kc+4xjwSCkZitB5SU0EgMjA0OCA8cnNhMjA0OEBleGFtcGxlLm9yZz6JATQEEwEC
-AB4FAkLIJbECGwMGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQnc+OnJvTHyQqHwf8
-DtzuAGmObfe3ggtn14x2wnU1Nigebe1K5liRnrLuVlLBpdO6CWmMUzfKRvyZlx54
-GlA9uUQSjW+RlgejdOTQqesDrcTEukYd4yzwbLZyM5Gb3lsE/FEmE7Dxw/0Utf59
-uACqzG8LACQn9J6sEgZWKxAupuYTHXd12lDPD3dnU4uzKPhMcjnSN00pzjusP7C9
-NZd3OLkAx2vw/dmb4Q+/QxeZhVYYsAUuR2hv9bgGWopumlOkt8Zu5YG6+CtTbJXp
-rPI7pJ1jHbeE+q/29hWJQtS8Abx82AcOkzhvS3NZKoJ/1DrGgoDAu1mGkM4KvLAx
-fDs/qQ9dZhtEmDbKPLTVEA==
-=WKAv
------END PGP PRIVATE KEY BLOCK-----
-');
-insert into keytbl (id, name, pubkey, seckey)
-values (5, 'psw-elg1024', '
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-mQGiBELIIUgRBACp401L6jXrLB28c3YA4sM3OJKnxM1GT9YTkWyE3Vyte65H8WU9
-tGPBX7OMuaX5eGZ84LFUGvaP0k7anfmXcDkCO3P9GgL+ro/dS2Ps/vChQPZqHaxE
-xpKDUt47B7DGdRJrC8DRnIR4wbSyQA6ma3S1yFqC5pJhSs+mqf9eExOjiwCgntth
-klRxIYw352ZX9Ov9oht/p/ED/1Xi4PS+tkXVvyIw5aZfa61bT6XvDkoPI0Aj3GE5
-YmCHJlKA/IhEr8QJOLV++5VEv4l6KQ1/DFoJzoNdr1AGJukgTc6X/WcQRzfQtUic
-PHQme5oAWoHa6bVQZOwvbJh3mOXDq/Tk/KF22go8maM44vMn4bvv+SBbslviYLiL
-jZJ1A/9JXF1esNq+X9HehJyqHHU7LEEf/ck6zC7o2erM3/LZlZuLNPD2cv3oL3Nv
-saEgcTSZl+8XmO8pLmzjKIb+hi70qVx3t2IhMqbb4B/dMY1Ck62gPBKa81/Wwi7v
-IsEBQLEtyBmGmI64YpzoRNFeaaF9JY+sAKqROqe6dLjJ7vebQLQfRWxnYW1hbCAx
-MDI0IDx0ZXN0QGV4YW1wbGUub3JnPoheBBMRAgAeBQJCyCFIAhsDBgsJCAcDAgMV
-AgMDFgIBAh4BAheAAAoJEBwpvA0YF3NkOtsAniI9W2bC3CxARTpYrev7ihreDzFc
-AJ9WYLQxDQAi5Ec9AQoodPkIagzZ4LkBDQRCyCFKEAQAh5SNbbJMAsJ+sQbcWEzd
-ku8AdYB5zY7Qyf9EOvn0g39bzANhxmmb6gbRlQN0ioymlDwraTKUAfuCZgNcg/0P
-sxFGb9nDcvjIV8qdVpnq1PuzMFuBbmGI6weg7Pj01dlPiO0wt1lLX+SubktqbYxI
-+h31c3RDZqxj+KAgxR8YNGMAAwYD+wQs2He1Z5+p4OSgMERiNzF0acZUYmc0e+/9
-6gfL0ft3IP+SSFo6hEBrkKVhZKoPSSRr5KpNaEobhdxsnKjUaw/qyoaFcNMzb4sF
-k8wq5UlCkR+h72u6hv8FuleCV8SJUT1U2JjtlXJR2Pey9ifh8rZfu57UbdwdHa0v
-iWc4DilhiEkEGBECAAkFAkLIIUoCGwwACgkQHCm8DRgXc2TtrwCfdPom+HlNVE9F
-ig3hGY1Rb4NEk1gAn1u9IuQB+BgDP40YHHz6bKWS/x80
-=RWci
------END PGP PUBLIC KEY BLOCK-----
-', '
------BEGIN PGP PRIVATE KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-lQHhBELIIUgRBACp401L6jXrLB28c3YA4sM3OJKnxM1GT9YTkWyE3Vyte65H8WU9
-tGPBX7OMuaX5eGZ84LFUGvaP0k7anfmXcDkCO3P9GgL+ro/dS2Ps/vChQPZqHaxE
-xpKDUt47B7DGdRJrC8DRnIR4wbSyQA6ma3S1yFqC5pJhSs+mqf9eExOjiwCgntth
-klRxIYw352ZX9Ov9oht/p/ED/1Xi4PS+tkXVvyIw5aZfa61bT6XvDkoPI0Aj3GE5
-YmCHJlKA/IhEr8QJOLV++5VEv4l6KQ1/DFoJzoNdr1AGJukgTc6X/WcQRzfQtUic
-PHQme5oAWoHa6bVQZOwvbJh3mOXDq/Tk/KF22go8maM44vMn4bvv+SBbslviYLiL
-jZJ1A/9JXF1esNq+X9HehJyqHHU7LEEf/ck6zC7o2erM3/LZlZuLNPD2cv3oL3Nv
-saEgcTSZl+8XmO8pLmzjKIb+hi70qVx3t2IhMqbb4B/dMY1Ck62gPBKa81/Wwi7v
-IsEBQLEtyBmGmI64YpzoRNFeaaF9JY+sAKqROqe6dLjJ7vebQP4DAwL3TCgrYdj6
-+GAnoSqGa87twi8a6QRRYIlEx3ddUCDCjzkJmRfF+LFtvX3OtWWK0+Syi3kj2IK9
-YT7pF7QfRWxnYW1hbCAxMDI0IDx0ZXN0QGV4YW1wbGUub3JnPoheBBMRAgAeBQJC
-yCFIAhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEBwpvA0YF3NkOtsAn1ynoCyM
-6GIvHDOewwmF4Z/jGQfzAJ9Q+MwIubi0ASfJifaEM23sIHwHop0BVwRCyCFKEAQA
-h5SNbbJMAsJ+sQbcWEzdku8AdYB5zY7Qyf9EOvn0g39bzANhxmmb6gbRlQN0ioym
-lDwraTKUAfuCZgNcg/0PsxFGb9nDcvjIV8qdVpnq1PuzMFuBbmGI6weg7Pj01dlP
-iO0wt1lLX+SubktqbYxI+h31c3RDZqxj+KAgxR8YNGMAAwYD+wQs2He1Z5+p4OSg
-MERiNzF0acZUYmc0e+/96gfL0ft3IP+SSFo6hEBrkKVhZKoPSSRr5KpNaEobhdxs
-nKjUaw/qyoaFcNMzb4sFk8wq5UlCkR+h72u6hv8FuleCV8SJUT1U2JjtlXJR2Pey
-9ifh8rZfu57UbdwdHa0viWc4Dilh/gMDAvdMKCth2Pr4YCCPsELdgJuzhGfDNRSg
-nKMRWBWHSJRk6JmCjM1iJQNHc4mMhR8gvi2TeqYLOhYjcF7nr/LA+JvLV+adj/mI
-SQQYEQIACQUCQsghSgIbDAAKCRAcKbwNGBdzZO2vAJ4hRaLcNcdl/qK8rt0N5zbZ
-saCh6QCfR1O48O8nYN93SPSfIFZK5rEmdv8=
-=Y6Qv
------END PGP PRIVATE KEY BLOCK-----
-');
-insert into keytbl (id, name, pubkey, seckey)
-values (6, 'rsaenc2048', '
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-mQELBELr2m0BCADOrnknlnXI0EzRExf/TgoHvK7Xx/E0keWqV3KrOyC3/tY2KOrj
-UVxaAX5pkFX9wdQObGPIJm06u6D16CH6CildX/vxG7YgvvKzK8JGAbwrXAfk7OIW
-czO2zRaZGDynoK3mAxHRBReyTKtNv8rDQhuZs6AOozJNARdbyUO/yqUnqNNygWuT
-4htFDEuLPIJwAbMSD0BvFW6YQaPdxzaAZm3EWVNbwDzjgbBUdBiUUwRdZIFUhsjJ
-dirFdy5+uuZru6y6CNC1OERkJ7P8EyoFiZckAIE5gshVZzNuyLOZjc5DhWBvLbX4
-NZElAnfiv+4nA6y8wQLSIbmHA3nqJaBklj85AAYptCVSU0EgMjA0OCBFbmMgPHJz
-YTIwNDhlbmNAZXhhbXBsZS5vcmc+iQE0BBMBAgAeBQJC69ptAhsDBgsJCAcDAgMV
-AgMDFgIBAh4BAheAAAoJEMiZ6pNEGVVZHMkIAJtGHHZ9iM8Yq1rr0zl1L6SvlQP8
-JCaxHa31wH3PKqGtq2M+cpb2rXf7gAY/doHJPXggfVzkyFrysmQ1gPbDGYLyOutw
-+IkhihEb5bWxQBNj+3zAFs1YX6v2HXWbSUSmyY1V9/+NTtKk03olDc/swd3lXzku
-UOhcgfpBgIt3Q+MpT6M2+OIF7lVfSb1rWdpwTfGhZzW9szQOeoS4gPvxCCRyuabQ
-RJ6DWH61F8fFIDJg1z+A/Obx4fqX6GOA69RzgZ3oukFBIXxNwV9PZNnAmHtZVYO8
-0g/oVYBbuvOYedffDBeQarhERZ5W2TnIE+nqY61YOLBqosliygdZTXULzNi5AQsE
-QuvaugEIAOuCJZdkzORA6e1lr81Lnr4JzMsVBFA+X/yIkBbV6qX/A4nVSLAZKNPX
-z1YIrMTu+1rMIiy10IWbA6zgMTpzPhJRfgePONgdnCYyK5Ksh5/C5ntzKwwGwxfK
-lAXIxJurCHXTbEa+YvPdn76vJ3HsXOXVEL+fLb4U3l3Ng87YM202Lh1Ha2MeS2zE
-FZcAoKbFqAAjDLEai64SoOFh0W3CsD1DL4zmfp+YZrUPHTtZadsi53i4KKW/ws9U
-rHlolqYNhYze/uRLyfnUx9PN4r/GhEzauyDMV0smo91uB3aewPft+eCpmeWnu0PF
-JVK4xyRmhIq2rVCw16a1pBJirvGM+y0ABimJAR8EGAECAAkFAkLr2roCGwwACgkQ
-yJnqk0QZVVku1wgAg1bLSjPkhw+ldG5HzumpqR84+JKyozdJaJzefu2+1iqYE0B0
-WLz2PJVIiK41xiEkKhBvTOQYuXmtWqAWXptD91P5SoXoNJWLQO3TNwarANhHxkWg
-w/TOUxQqoctlRUej5NDD+4eW5G9lcS1FEGuKDWtX096u80vO+TbyJjvx2eVM1k+X
-dmeYsGOiNgDimCreJGYc14G7eY9jt24gw10n1sMAKI1qm6lcoHqZ9OOyla+wJdro
-PYZGO7R8+1O9R22WrK6BYDT5j/1JwMZqbOESjNvDEVT0yOHClCHRN4CChbt6LhKh
-CLUNdz/udIt0JAC6c/HdPLSW3HnmM3+iNj+Kug==
-=pwU2
------END PGP PUBLIC KEY BLOCK-----
-', '
------BEGIN PGP PRIVATE KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-lQOWBELr2m0BCADOrnknlnXI0EzRExf/TgoHvK7Xx/E0keWqV3KrOyC3/tY2KOrj
-UVxaAX5pkFX9wdQObGPIJm06u6D16CH6CildX/vxG7YgvvKzK8JGAbwrXAfk7OIW
-czO2zRaZGDynoK3mAxHRBReyTKtNv8rDQhuZs6AOozJNARdbyUO/yqUnqNNygWuT
-4htFDEuLPIJwAbMSD0BvFW6YQaPdxzaAZm3EWVNbwDzjgbBUdBiUUwRdZIFUhsjJ
-dirFdy5+uuZru6y6CNC1OERkJ7P8EyoFiZckAIE5gshVZzNuyLOZjc5DhWBvLbX4
-NZElAnfiv+4nA6y8wQLSIbmHA3nqJaBklj85AAYpAAf9GuKpxrXp267eSPw9ZeSw
-Ik6ob1I0MHbhhHeaXQnF0SuOViJ1+Bs74hUB3/F5fqrnjVLIS/ysYzegYpbpXOIa
-MZwYcp2e+dpmVb7tkGQgzXH0igGtBQBqoSUVq9mG2XKPVh2JmiYgOH6GrHSGmnCq
-GCgEK4ezSomB/3OtPFSjAxOlSw6dXSkapSxW3pEGvCdaWd9p8yl4rSpGsZEErPPL
-uSbZZrHtWfgq5UXdPeE1UnMlBcvSruvpN4qgWMgSMs4d2lXvzXJLcht/nryP+atT
-H1gwnRmlDCVv5BeJepKo3ORJDvcPlXkJPhqS9If3BhTqt6QgQEFI4aIYYZOZpZoi
-2QQA2Zckzktmsc1MS04zS9gm1CbxM9d2KK8EOlh7fycRQhYYqqavhTBH2MgEp+Dd
-ZtuEN5saNDe9x/fwi2ok1Bq6luGMWPZU/nZe7fxadzwfliy/qPzStWFW3vY9mMLu
-6uEqgjin/lf4YrAswXDZaEc5e4GuNgGfwr27hpjxE1jg3PsEAPMqXEOMT2yh+yRu
-DlLRbFhYOI4aUHY2CGoQQONnwv2O5gFvmOcPlg3J5lvnwlOYCx0c3bDxAtHyjPJq
-FAZqcJBaB9RDhKHwlWDrbx/6FPH2SuKE+u4msIhPFin4V3FAP+yTem/TKrdnaWy6
-EUrhCWTXVRTijBaCudfjFd/ipHZbA/0dv7UAcoWK6kiVLzyE+jOvtN+ZxTzxq7CW
-mlFPgAC966hgJmz9IXqadtMgPAoL3PK9q1DbPM3JhsQcJrNzTJqZrdN1/kPU0HHa
-+aof1BVy3wSvp2mXgaRUULStyhUIyBRM6hAYp3/MoWEYn/bwr+zQkIU8Zsk6OsZ6
-q1xE3cowrUWFtCVSU0EgMjA0OCBFbmMgPHJzYTIwNDhlbmNAZXhhbXBsZS5vcmc+
-iQE0BBMBAgAeBQJC69ptAhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEMiZ6pNE
-GVVZHMkIAJtGHHZ9iM8Yq1rr0zl1L6SvlQP8JCaxHa31wH3PKqGtq2M+cpb2rXf7
-gAY/doHJPXggfVzkyFrysmQ1gPbDGYLyOutw+IkhihEb5bWxQBNj+3zAFs1YX6v2
-HXWbSUSmyY1V9/+NTtKk03olDc/swd3lXzkuUOhcgfpBgIt3Q+MpT6M2+OIF7lVf
-Sb1rWdpwTfGhZzW9szQOeoS4gPvxCCRyuabQRJ6DWH61F8fFIDJg1z+A/Obx4fqX
-6GOA69RzgZ3oukFBIXxNwV9PZNnAmHtZVYO80g/oVYBbuvOYedffDBeQarhERZ5W
-2TnIE+nqY61YOLBqosliygdZTXULzNidA5YEQuvaugEIAOuCJZdkzORA6e1lr81L
-nr4JzMsVBFA+X/yIkBbV6qX/A4nVSLAZKNPXz1YIrMTu+1rMIiy10IWbA6zgMTpz
-PhJRfgePONgdnCYyK5Ksh5/C5ntzKwwGwxfKlAXIxJurCHXTbEa+YvPdn76vJ3Hs
-XOXVEL+fLb4U3l3Ng87YM202Lh1Ha2MeS2zEFZcAoKbFqAAjDLEai64SoOFh0W3C
-sD1DL4zmfp+YZrUPHTtZadsi53i4KKW/ws9UrHlolqYNhYze/uRLyfnUx9PN4r/G
-hEzauyDMV0smo91uB3aewPft+eCpmeWnu0PFJVK4xyRmhIq2rVCw16a1pBJirvGM
-+y0ABikAB/oC3z7lv6sVg+ngjbpWy9lZu2/ECZ9FqViVz7bUkjfvSuowgpncryLW
-4EpVV4U6mMSgU6kAi5VGT/BvYGSAtnqDWGiPs7Kk+h4Adz74bEAXzU280pNBtSfX
-tGvzlS4a376KzYFSCJDRBdMebEhJMbY0wQmR8lTZu5JSUI4YYEuN0c7ckdsw8w42
-QWTLonG8HC6h8UPKS0EAcaCo7tFubMIesU6cWuTYucsHE+wjbADjuSNX968qczNe
-NoL2BUznXOQoPu6HQO4/8cr7ib+VQkB2bHQcMoZazPUStIID1e4CL4XcxfuAmT8o
-3XDvMLgVqNp5W2f8Mzmk3/DbtsLXLOv5BADsCzQpseC8ikSYJC72hcon1wlUmGeH
-3qgGiiHhYXFa18xgI5juoO8DaWno0rPPlgr36Y8mSB5qjYHMXwjKnKyUmt11H+hU
-+6uk4hq3Rjd8l+vfuOSr1xoTrtBUg9Rwfw6JVo0DC+8CWg4oBWsLXVM6KQXPFdJs
-8kyFQplR/iP1XQQA/2tbDANjAYGNNDjJO9/0kEnSAUyYMasFJDrA2q17J5CroVQw
-QpMmWwdDkRANUVPKnWHS5sS65BRc7UytKe2f3A3ZInGXJIK2Hl+TzapWYcYxql+4
-ol5mEDDMDbhEE8Wmj9KyB6iifdLI0K+yxNb9T4Jpj3J18+St+G8+9AcFcBEEAM1b
-M9C+/05cnV8gjcByqH9M9ypo8fzPvMKVXWwCLQXpaL50QIkzLURkiMoEWrCdELaA
-sVPotRzePTIQ1ooLeDxd1gRnDqjZiIR0kwmv6vq8tfzY96O2ZbGWFI5eth89aWEJ
-WB8AR3zYcXpwJLwPuhXW2/NlZF0bclJ3jNzAfTIeQmeJAR8EGAECAAkFAkLr2roC
-GwwACgkQyJnqk0QZVVku1wgAg1bLSjPkhw+ldG5HzumpqR84+JKyozdJaJzefu2+
-1iqYE0B0WLz2PJVIiK41xiEkKhBvTOQYuXmtWqAWXptD91P5SoXoNJWLQO3TNwar
-ANhHxkWgw/TOUxQqoctlRUej5NDD+4eW5G9lcS1FEGuKDWtX096u80vO+TbyJjvx
-2eVM1k+XdmeYsGOiNgDimCreJGYc14G7eY9jt24gw10n1sMAKI1qm6lcoHqZ9OOy
-la+wJdroPYZGO7R8+1O9R22WrK6BYDT5j/1JwMZqbOESjNvDEVT0yOHClCHRN4CC
-hbt6LhKhCLUNdz/udIt0JAC6c/HdPLSW3HnmM3+iNj+Kug==
-=UKh3
------END PGP PRIVATE KEY BLOCK-----
-');
--- elg1024 / aes128
-insert into encdata (id, data) values (1, '
------BEGIN PGP MESSAGE-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-hQEOA9k2z2S7c/RmEAQAgVWW0DeLrZ+1thWJGBPp2WRFL9HeNqqWHbKJCXJbz1Uy
-faUY7yxVvG5Eutmo+JMiY3mg23/DgVVXHQZsTWpGvGM6djgUNGKUjZDbW6Nog7Mr
-e78IywattCOmgUP9vIwwg3OVjuDCN/nVirGQFnXpJBc8DzWqDMWRWDy1M0ZsK7AD
-/2JTosSFxUdpON0DKtIY3GLzmh6Nk3iV0g8VgJKUBT1rhCXuMDj3snm//EMm7hTY
-PlnObq4mIhgz8NqprmhooxnU0Kapofb3P3wCHPpU14zxhXY8iKO/3JhBq2uFcx4X
-uBMwkW4AdNxY/mzJZELteTL8Tr0s7PISk+owb4URpG3n0jsBc0CVULxrjh5Ejkdw
-wCM195J6+KbQxOOFQ0b3uOVvv4dEgd/hRERCOq5EPaFhlHegyYJ7YO842vnSDA==
-=PABx
------END PGP MESSAGE-----
-');
--- elg2048 / blowfish
-insert into encdata (id, data) values (2, '
------BEGIN PGP MESSAGE-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-hQIOAywibh/+XMfUEAf+OINhBngEsw4a/IJIeJvUgv1gTQzBwOdQEuc/runr4Oa8
-Skw/Bj0X/zgABVZLem1a35NHaNwaQaCFwMQ41YyWCu+jTdsiyX/Nw0w8LKKz0rNC
-vVpG6YuV7Turtsf8a5lXy1K0SHkLlgxQ6c76GS4gtSl5+bsL2+5R1gSRJ9NXqCQP
-OHRipEiYwBPqr5R21ZG0FXXNKGOGkj6jt/M/wh3WVtAhYuBI+HPKRfAEjd/Pu/eD
-e1zYtkH1dKKFmp44+nF0tTI274xpuso7ShfKYrOK3saFWrl0DWiWteUinjSA1YBY
-m7dG7NZ8PW+g1SZWhEoPjEEEHz3kWMvlKheMRDudnQf/dDyX6kZVIAQF/5B012hq
-QyVewgTGysowFIDn01uIewoEA9cASw699jw9IoJp+k5WZXnU+INllBLzQxniQCSu
-iEcr0x3fYqNtj9QBfbIqyRcY6HTWcmzyOUeGaSyX76j+tRAvtVtXpraFFFnaHB70
-YpXTjLkp8EBafzMghFaKDeXlr2TG/T7rbwcwWrFIwPqEAUKWN5m97Q3eyo8/ioMd
-YoFD64J9ovSsgbuU5IpIGAsjxK+NKzg/2STH7zZFEVCtgcIXsTHTZfiwS98/+1H9
-p1DIDaXIcUFV2ztmcKxh9gt2sXRz1W+x6D8O0k3nanU5yGG4miLKaq18fbcA0BD1
-+NIzAfelq6nvvxYKcGcamBMgLo5JkZOBHvyr6RsAKIT5QYc0QTjysTk9l0Am3gYc
-G2pAE+3k
-=TBHV
------END PGP MESSAGE-----
-');
--- elg4096 / aes256
-insert into encdata (id, data) values (3, '
------BEGIN PGP MESSAGE-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-hQQOA7aFBP0Sjh/5EA/+JCgncc8IZmmRjPStWnGf9tVJhgHTn+smIclibGzs0deS
-SPSCitzpblwbUDvu964+/5e5Q1l7rRuNN+AgETlEd4eppv7Swn2ChdgOXxRwukcT
-Nh3G+PTFvD4ayi7w1db3qvXIt0MwN4Alt436wJmK1oz2Ka9IcyO+wHWrDy1nSGSx
-z5x7YEj+EZPgWc/YAvudqE8Jpzd/OT5zSHN09UFkIAk6NxisKaIstbEGFgpqtoDZ
-1SJM84XAdL2IcaJ3YY7k/yzwlawhsakKd4GSd5vWmAwvyzzbSiBMfKsDE16ePLNU
-ZBF7CzmlCBPZ7YrFAHLpXBXXkCQvzD2BEYOjse50ZEfJ036T7950Ozcdy1EQbGon
-nyQ4Gh0PBpnMcBuiXOceWuYzhlzFOzDtlVKdNTxFRDcbEyW2jo9xQYvCCLnYy8EH
-2M7S8jCtVYJBbn63a82ELv+3+kWYcsvBJv2ZVBh4ncrBu9o0P+OYS7ApoOU+j6p2
-+t0RXHksqXS1YiUwYF5KSw09EbYMgNZ9G04Px/PxLU6fSC9iDrGX7Xt3kOUP0mku
-C518fPckT0zzRXqfFruJNRzDytW50KxkOQZzU1/Az1YlYN9QzWeU4EtLPb2fftZo
-D0qH/ln+f9Op5t6sD2fcxZVECU1b/bFtZsxvwH406YL+UQ7hU/XnZrzVVzODal8P
-/j1hg7v7BdJqu1DTp9nFWUuwMFcYAczuXn29IG183NZ7Ts4whDeYEhS8eNoLPX4j
-txY12ILD/w/3Q4LoW/hPa6OdfEzsn0U5GLf1WiGmJE1H6ft2U/xUnerc/u0kt+FU
-WAisArd4MuKtf7B5Vu/VF3kUdrR0hTniUKUivmC4o1jSId31Dufxj4aadVyldXAr
-6TNBcdyragZjxEZ6hsBCYzA0Rd1a8atd6OaQoIEEfAzCu5Ks29pydHErStYGjWJ1
-KA5KPLVvjbHpDmRhlCcm8vgpYQsBYEB5gE9fx5yCTlsVhCB6y23h7hfdMqerDqkO
-ZOPsO5h+tiHCdIrQ36sMjuINy1/K2rYcXd+Crh2iHcfidpU9fvDz2ihTRNQlhjuT
-0cQZM5JhctEx4VXF4LDctRhit7Hn0iqsk604woQfJVvP8O673xSXT/kBY0A/v9C0
-3C4YoFNeSaKwbfZQ/4u1ZFPJxK2IIJa8UGpyAUewLMlzGVVagljybv/f4Z9ERAhy
-huq5sMmw8UPsrJF2TUGHz5WSIwoh0J/qovoQI09I9sdEnFczDvRavMO2Mldy3E5i
-exz9oewtel6GOmsZQSYWT/vJzbYMmvHNmNpVwwoKrLV6oI3kyQ80GHBwI1WlwHoK
-2iRB0w8q4VVvJeYAz8ZIp380cqC3pfO0uZsrOx4g3k4X0jsB5y7rF5xXcZfnVbvG
-DYKcOy60/OHMWVvpw6trAoA+iP+cVWPtrbRvLglTVTfYmi1ToZDDipkALBhndQ==
-=L/M/
------END PGP MESSAGE-----
-');
--- rsaenc2048 / aes128
-insert into encdata (id, data) values (4, '
------BEGIN PGP MESSAGE-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-hQEMA/0CBsQJt0h1AQf+JyYnCiortj26P11zk28MKOGfWpWyAhuIgwbJXsdQ+e6r
-pEyyqs9GC6gI7SNF6+J8B/gsMwvkAL4FHAQCvA4ZZ6eeXR1Of4YG22JQGmpWVWZg
-DTyfhA2vkczuqfAD2tgUpMT6sdyGkQ/fnQ0lknlfHgC5GRx7aavOoAKtMqiZW5PR
-yae/qR48mjX7Mb+mLvbagv9mHEgQSmHwFpaq2k456BbcZ23bvCmBnCvqV/90Ggfb
-VP6gkSoFVsJ19RHsOhW1dk9ehbl51WB3zUOO5FZWwUTY9DJvKblRK/frF0+CXjE4
-HfcZXHSpSjx4haGGTsMvEJ85qFjZpr0eTGOdY5cFhNJAAVP8MZfji7OhPRAoOOIK
-eRGOCkao12pvPyFTFnPd5vqmyBbdNpK4Q0hS82ljugMJvM0p3vJZVzW402Kz6iBL
-GQ==
-=XHkF
------END PGP MESSAGE-----
-');
--- successful decrypt
-select pgp_pub_decrypt(dearmor(data), dearmor(seckey))
-from keytbl, encdata where keytbl.id=1 and encdata.id=1;
- pgp_pub_decrypt
------------------
- Secret msg
-(1 row)
-
-select pgp_pub_decrypt(dearmor(data), dearmor(seckey))
-from keytbl, encdata where keytbl.id=2 and encdata.id=2;
- pgp_pub_decrypt
------------------
- Secret msg
-(1 row)
-
-select pgp_pub_decrypt(dearmor(data), dearmor(seckey))
-from keytbl, encdata where keytbl.id=3 and encdata.id=3;
- pgp_pub_decrypt
------------------
- Secret msg
-(1 row)
-
-select pgp_pub_decrypt(dearmor(data), dearmor(seckey))
-from keytbl, encdata where keytbl.id=6 and encdata.id=4;
- pgp_pub_decrypt
------------------
- Secret message.
-(1 row)
-
--- wrong key
-select pgp_pub_decrypt(dearmor(data), dearmor(seckey))
-from keytbl, encdata where keytbl.id=2 and encdata.id=1;
-ERROR: Wrong key
--- sign-only key
-select pgp_pub_decrypt(dearmor(data), dearmor(seckey))
-from keytbl, encdata where keytbl.id=4 and encdata.id=1;
-ERROR: No encryption key found
--- password-protected secret key, no password
-select pgp_pub_decrypt(dearmor(data), dearmor(seckey))
-from keytbl, encdata where keytbl.id=5 and encdata.id=1;
-ERROR: Need password for secret key
--- password-protected secret key, wrong password
-select pgp_pub_decrypt(dearmor(data), dearmor(seckey), 'foo')
-from keytbl, encdata where keytbl.id=5 and encdata.id=1;
-ERROR: Corrupt data
--- password-protected secret key, right password
-select pgp_pub_decrypt(dearmor(data), dearmor(seckey), 'parool')
-from keytbl, encdata where keytbl.id=5 and encdata.id=1;
- pgp_pub_decrypt
------------------
- Secret msg
-(1 row)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/pgp-pubkey-encrypt.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/pgp-pubkey-encrypt.out b/contrib/pgcrypto/expected/pgp-pubkey-encrypt.out
deleted file mode 100755
index e222541..0000000
--- a/contrib/pgcrypto/expected/pgp-pubkey-encrypt.out
+++ /dev/null
@@ -1,68 +0,0 @@
---
--- PGP Public Key Encryption
---
--- successful encrypt/decrypt
-select pgp_pub_decrypt(
- pgp_pub_encrypt('Secret msg', dearmor(pubkey)),
- dearmor(seckey))
-from keytbl where keytbl.id=1;
- pgp_pub_decrypt
------------------
- Secret msg
-(1 row)
-
-select pgp_pub_decrypt(
- pgp_pub_encrypt('Secret msg', dearmor(pubkey)),
- dearmor(seckey))
-from keytbl where keytbl.id=2;
- pgp_pub_decrypt
------------------
- Secret msg
-(1 row)
-
-select pgp_pub_decrypt(
- pgp_pub_encrypt('Secret msg', dearmor(pubkey)),
- dearmor(seckey))
-from keytbl where keytbl.id=3;
- pgp_pub_decrypt
------------------
- Secret msg
-(1 row)
-
-select pgp_pub_decrypt(
- pgp_pub_encrypt('Secret msg', dearmor(pubkey)),
- dearmor(seckey))
-from keytbl where keytbl.id=6;
- pgp_pub_decrypt
------------------
- Secret msg
-(1 row)
-
--- try with rsa-sign only
-select pgp_pub_decrypt(
- pgp_pub_encrypt('Secret msg', dearmor(pubkey)),
- dearmor(seckey))
-from keytbl where keytbl.id=4;
-ERROR: No encryption key found
--- try with secret key
-select pgp_pub_decrypt(
- pgp_pub_encrypt('Secret msg', dearmor(seckey)),
- dearmor(seckey))
-from keytbl where keytbl.id=1;
-ERROR: Refusing to encrypt with secret key
--- does text-to-bytea works
-select pgp_pub_decrypt_bytea(
- pgp_pub_encrypt('Secret msg', dearmor(pubkey)),
- dearmor(seckey))
-from keytbl where keytbl.id=1;
- pgp_pub_decrypt_bytea
------------------------
- Secret msg
-(1 row)
-
--- and bytea-to-text?
-select pgp_pub_decrypt(
- pgp_pub_encrypt_bytea('Secret msg', dearmor(pubkey)),
- dearmor(seckey))
-from keytbl where keytbl.id=1;
-ERROR: Not text data
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/pgp-zlib-DISABLED.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/pgp-zlib-DISABLED.out b/contrib/pgcrypto/expected/pgp-zlib-DISABLED.out
deleted file mode 100755
index 6f4eccd..0000000
--- a/contrib/pgcrypto/expected/pgp-zlib-DISABLED.out
+++ /dev/null
@@ -1 +0,0 @@
--- zlib is disabled
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/rijndael.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/rijndael.out b/contrib/pgcrypto/expected/rijndael.out
deleted file mode 100755
index cb336e3..0000000
--- a/contrib/pgcrypto/expected/rijndael.out
+++ /dev/null
@@ -1,124 +0,0 @@
---
--- AES / Rijndael-128 cipher
---
--- some standard Rijndael testvalues
-SELECT encode(encrypt(
-decode('00112233445566778899aabbccddeeff', 'hex'),
-decode('000102030405060708090a0b0c0d0e0f', 'hex'),
-'aes-ecb/pad:none'), 'hex');
- encode
-----------------------------------
- 69c4e0d86a7b0430d8cdb78070b4c55a
-(1 row)
-
-SELECT encode(encrypt(
-decode('00112233445566778899aabbccddeeff', 'hex'),
-decode('000102030405060708090a0b0c0d0e0f1011121314151617', 'hex'),
-'aes-ecb/pad:none'), 'hex');
- encode
-----------------------------------
- dda97ca4864cdfe06eaf70a0ec0d7191
-(1 row)
-
-SELECT encode(encrypt(
-decode('00112233445566778899aabbccddeeff', 'hex'),
-decode('000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f', 'hex'),
-'aes-ecb/pad:none'), 'hex');
- encode
-----------------------------------
- 8ea2b7ca516745bfeafc49904b496089
-(1 row)
-
--- cbc
-SELECT encode(encrypt(
-decode('00112233445566778899aabbccddeeff', 'hex'),
-decode('000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f', 'hex'),
-'aes-cbc/pad:none'), 'hex');
- encode
-----------------------------------
- 8ea2b7ca516745bfeafc49904b496089
-(1 row)
-
--- key padding
-SELECT encode(encrypt(
-decode('0011223344', 'hex'),
-decode('000102030405', 'hex'),
-'aes-cbc'), 'hex');
- encode
-----------------------------------
- 189a28932213f017b246678dbc28655f
-(1 row)
-
-SELECT encode(encrypt(
-decode('0011223344', 'hex'),
-decode('000102030405060708090a0b0c0d0e0f10111213', 'hex'),
-'aes-cbc'), 'hex');
- encode
-----------------------------------
- 3b02279162d15580e069d3a71407a556
-(1 row)
-
-SELECT encode(encrypt(
-decode('0011223344', 'hex'),
-decode('000102030405060708090a0b0c0d0e0f101112131415161718191a1b', 'hex'),
-'aes-cbc'), 'hex');
- encode
-----------------------------------
- 4facb6a041d53e0a5a73289170901fe7
-(1 row)
-
--- empty data
-select encode( encrypt('', 'foo', 'aes'), 'hex');
- encode
-----------------------------------
- b48cc3338a2eb293b6007ef72c360d48
-(1 row)
-
--- 10 bytes key
-select encode( encrypt('foo', '0123456789', 'aes'), 'hex');
- encode
-----------------------------------
- f397f03d2819b7172b68d0706fda4693
-(1 row)
-
--- 22 bytes key
-select encode( encrypt('foo', '0123456789012345678901', 'aes'), 'hex');
- encode
-----------------------------------
- 5c9db77af02b4678117bcd8a71ae7f53
-(1 row)
-
--- decrypt
-select decrypt(encrypt('foo', '0123456', 'aes'), '0123456', 'aes');
- decrypt
----------
- foo
-(1 row)
-
--- iv
-select encode(encrypt_iv('foo', '0123456', 'abcd', 'aes'), 'hex');
- encode
-----------------------------------
- 2c24cb7da91d6d5699801268b0f5adad
-(1 row)
-
-select decrypt_iv(decode('2c24cb7da91d6d5699801268b0f5adad', 'hex'),
- '0123456', 'abcd', 'aes');
- decrypt_iv
-------------
- foo
-(1 row)
-
--- long message
-select encode(encrypt('Lets try a longer message.', '0123456789', 'aes'), 'hex');
- encode
-------------------------------------------------------------------
- d9beb785dd5403ed02f66b755bb191b93ed93ca54930153f2c3b9ec7785056ad
-(1 row)
-
-select decrypt(encrypt('Lets try a longer message.', '0123456789', 'aes'), '0123456789', 'aes');
- decrypt
-----------------------------
- Lets try a longer message.
-(1 row)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/sha1.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/sha1.out b/contrib/pgcrypto/expected/sha1.out
deleted file mode 100755
index 9324d5d..0000000
--- a/contrib/pgcrypto/expected/sha1.out
+++ /dev/null
@@ -1,45 +0,0 @@
---
--- SHA1 message digest
---
-SELECT encode(digest('', 'sha1'), 'hex');
- encode
-------------------------------------------
- da39a3ee5e6b4b0d3255bfef95601890afd80709
-(1 row)
-
-SELECT encode(digest('a', 'sha1'), 'hex');
- encode
-------------------------------------------
- 86f7e437faa5a7fce15d1ddcb9eaeaea377667b8
-(1 row)
-
-SELECT encode(digest('abc', 'sha1'), 'hex');
- encode
-------------------------------------------
- a9993e364706816aba3e25717850c26c9cd0d89d
-(1 row)
-
-SELECT encode(digest('message digest', 'sha1'), 'hex');
- encode
-------------------------------------------
- c12252ceda8be8994d5fa0290a47231c1d16aae3
-(1 row)
-
-SELECT encode(digest('abcdefghijklmnopqrstuvwxyz', 'sha1'), 'hex');
- encode
-------------------------------------------
- 32d10c7b8cf96570ca04ce37f2a19d84240d3a89
-(1 row)
-
-SELECT encode(digest('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'sha1'), 'hex');
- encode
-------------------------------------------
- 761c457bf73b14d27e9e9265c46f4b4dda11f940
-(1 row)
-
-SELECT encode(digest('12345678901234567890123456789012345678901234567890123456789012345678901234567890', 'sha1'), 'hex');
- encode
-------------------------------------------
- 50abf5706a150990a08b2c5ea40fa0e585554732
-(1 row)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/expected/sha2.out
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/expected/sha2.out b/contrib/pgcrypto/expected/sha2.out
deleted file mode 100755
index 20bdf0e..0000000
--- a/contrib/pgcrypto/expected/sha2.out
+++ /dev/null
@@ -1,108 +0,0 @@
---
--- SHA2 family
---
--- SHA256
-SELECT encode(digest('', 'sha256'), 'hex');
- encode
-------------------------------------------------------------------
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
-(1 row)
-
-SELECT encode(digest('a', 'sha256'), 'hex');
- encode
-------------------------------------------------------------------
- ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb
-(1 row)
-
-SELECT encode(digest('abc', 'sha256'), 'hex');
- encode
-------------------------------------------------------------------
- ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
-(1 row)
-
-SELECT encode(digest('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', 'sha256'), 'hex');
- encode
-------------------------------------------------------------------
- 248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1
-(1 row)
-
-SELECT encode(digest('12345678901234567890123456789012345678901234567890123456789012345678901234567890', 'sha256'), 'hex');
- encode
-------------------------------------------------------------------
- f371bc4a311f2b009eef952dd83ca80e2b60026c8e935592d0f9c308453c813e
-(1 row)
-
--- SHA384
-SELECT encode(digest('', 'sha384'), 'hex');
- encode
---------------------------------------------------------------------------------------------------
- 38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b
-(1 row)
-
-SELECT encode(digest('a', 'sha384'), 'hex');
- encode
---------------------------------------------------------------------------------------------------
- 54a59b9f22b0b80880d8427e548b7c23abd873486e1f035dce9cd697e85175033caa88e6d57bc35efae0b5afd3145f31
-(1 row)
-
-SELECT encode(digest('abc', 'sha384'), 'hex');
- encode
---------------------------------------------------------------------------------------------------
- cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7
-(1 row)
-
-SELECT encode(digest('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', 'sha384'), 'hex');
- encode
---------------------------------------------------------------------------------------------------
- 3391fdddfc8dc7393707a65b1b4709397cf8b1d162af05abfe8f450de5f36bc6b0455a8520bc4e6f5fe95b1fe3c8452b
-(1 row)
-
-SELECT encode(digest('abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu', 'sha384'), 'hex');
- encode
---------------------------------------------------------------------------------------------------
- 09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712fcc7c71a557e2db966c3e9fa91746039
-(1 row)
-
-SELECT encode(digest('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz', 'sha384'), 'hex');
- encode
---------------------------------------------------------------------------------------------------
- 3d208973ab3508dbbd7e2c2862ba290ad3010e4978c198dc4d8fd014e582823a89e16f9b2a7bbc1ac938e2d199e8bea4
-(1 row)
-
--- SHA512
-SELECT encode(digest('', 'sha512'), 'hex');
- encode
-----------------------------------------------------------------------------------------------------------------------------------
- cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e
-(1 row)
-
-SELECT encode(digest('a', 'sha512'), 'hex');
- encode
-----------------------------------------------------------------------------------------------------------------------------------
- 1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c652bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75
-(1 row)
-
-SELECT encode(digest('abc', 'sha512'), 'hex');
- encode
-----------------------------------------------------------------------------------------------------------------------------------
- ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f
-(1 row)
-
-SELECT encode(digest('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', 'sha512'), 'hex');
- encode
-----------------------------------------------------------------------------------------------------------------------------------
- 204a8fc6dda82f0a0ced7beb8e08a41657c16ef468b228a8279be331a703c33596fd15c13b1b07f9aa1d3bea57789ca031ad85c7a71dd70354ec631238ca3445
-(1 row)
-
-SELECT encode(digest('abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu', 'sha512'), 'hex');
- encode
-----------------------------------------------------------------------------------------------------------------------------------
- 8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909
-(1 row)
-
-SELECT encode(digest('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz', 'sha512'), 'hex');
- encode
-----------------------------------------------------------------------------------------------------------------------------------
- 930d0cefcb30ff1133b6898121f1cf3d27578afcafe8677c5257cf069911f75d8f5831b56ebfda67b278e66dff8b84fe2b2870f742a580d8edb41987232850c9
-(1 row)
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/fortuna.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/fortuna.c b/contrib/pgcrypto/fortuna.c
deleted file mode 100644
index 4e97946..0000000
--- a/contrib/pgcrypto/fortuna.c
+++ /dev/null
@@ -1,462 +0,0 @@
-/*
- * fortuna.c
- * Fortuna-like PRNG.
- *
- * Copyright (c) 2005 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/fortuna.c,v 1.9 2009/06/11 14:48:52 momjian Exp $
- */
-
-#include "postgres.h"
-
-#include <sys/time.h>
-#include <time.h>
-
-#include "rijndael.h"
-#include "sha2.h"
-#include "fortuna.h"
-
-
-/*
- * Why Fortuna-like: There does not seem to be any definitive reference
- * on Fortuna in the net. Instead this implementation is based on
- * following references:
- *
- * http://en.wikipedia.org/wiki/Fortuna_(PRNG)
- * - Wikipedia article
- * http://jlcooke.ca/random/
- * - Jean-Luc Cooke Fortuna-based /dev/random driver for Linux.
- */
-
-/*
- * There is some confusion about whether and how to carry forward
- * the state of the pools. Seems like original Fortuna does not
- * do it, resetting hash after each request. I guess expecting
- * feeding to happen more often that requesting. This is absolutely
- * unsuitable for pgcrypto, as nothing asynchronous happens here.
- *
- * J.L. Cooke fixed this by feeding previous hash to new re-initialized
- * hash context.
- *
- * Fortuna predecessor Yarrow requires ability to query intermediate
- * 'final result' from hash, without affecting it.
- *
- * This implementation uses the Yarrow method - asking intermediate
- * results, but continuing with old state.
- */
-
-
-/*
- * Algorithm parameters
- */
-
-/*
- * How many pools.
- *
- * Original Fortuna uses 32 pools, that means 32'th pool is
- * used not earlier than in 13th year. This is a waste in
- * pgcrypto, as we have very low-frequancy seeding. Here
- * is preferable to have all entropy usable in reasonable time.
- *
- * With 23 pools, 23th pool is used after 9 days which seems
- * more sane.
- *
- * In our case the minimal cycle time would be bit longer
- * than the system-randomness feeding frequency.
- */
-#define NUM_POOLS 23
-
-/* in microseconds */
-#define RESEED_INTERVAL 100000 /* 0.1 sec */
-
-/* for one big request, reseed after this many bytes */
-#define RESEED_BYTES (1024*1024)
-
-/*
- * Skip reseed if pool 0 has less than this many
- * bytes added since last reseed.
- */
-#define POOL0_FILL (256/8)
-
-/*
- * Algorithm constants
- */
-
-/* Both cipher key size and hash result size */
-#define BLOCK 32
-
-/* cipher block size */
-#define CIPH_BLOCK 16
-
-/* for internal wrappers */
-#define MD_CTX SHA256_CTX
-#define CIPH_CTX rijndael_ctx
-
-struct fortuna_state
-{
- uint8 counter[CIPH_BLOCK];
- uint8 result[CIPH_BLOCK];
- uint8 key[BLOCK];
- MD_CTX pool[NUM_POOLS];
- CIPH_CTX ciph;
- unsigned reseed_count;
- struct timeval last_reseed_time;
- unsigned pool0_bytes;
- unsigned rnd_pos;
- int tricks_done;
-};
-typedef struct fortuna_state FState;
-
-
-/*
- * Use our own wrappers here.
- * - Need to get intermediate result from digest, without affecting it.
- * - Need re-set key on a cipher context.
- * - Algorithms are guaranteed to exist.
- * - No memory allocations.
- */
-
-static void
-ciph_init(CIPH_CTX * ctx, const uint8 *key, int klen)
-{
- rijndael_set_key(ctx, (const uint32 *) key, klen, 1);
-}
-
-static void
-ciph_encrypt(CIPH_CTX * ctx, const uint8 *in, uint8 *out)
-{
- rijndael_encrypt(ctx, (const uint32 *) in, (uint32 *) out);
-}
-
-static void
-md_init(MD_CTX * ctx)
-{
- SHA256_Init(ctx);
-}
-
-static void
-md_update(MD_CTX * ctx, const uint8 *data, int len)
-{
- SHA256_Update(ctx, data, len);
-}
-
-static void
-md_result(MD_CTX * ctx, uint8 *dst)
-{
- SHA256_CTX tmp;
-
- memcpy(&tmp, ctx, sizeof(*ctx));
- SHA256_Final(dst, &tmp);
- memset(&tmp, 0, sizeof(tmp));
-}
-
-/*
- * initialize state
- */
-static void
-init_state(FState *st)
-{
- int i;
-
- memset(st, 0, sizeof(*st));
- for (i = 0; i < NUM_POOLS; i++)
- md_init(&st->pool[i]);
-}
-
-/*
- * Endianess does not matter.
- * It just needs to change without repeating.
- */
-static void
-inc_counter(FState *st)
-{
- uint32 *val = (uint32 *) st->counter;
-
- if (++val[0])
- return;
- if (++val[1])
- return;
- if (++val[2])
- return;
- ++val[3];
-}
-
-/*
- * This is called 'cipher in counter mode'.
- */
-static void
-encrypt_counter(FState *st, uint8 *dst)
-{
- ciph_encrypt(&st->ciph, st->counter, dst);
- inc_counter(st);
-}
-
-
-/*
- * The time between reseed must be at least RESEED_INTERVAL
- * microseconds.
- */
-static int
-enough_time_passed(FState *st)
-{
- int ok;
- struct timeval tv;
- struct timeval *last = &st->last_reseed_time;
-
- gettimeofday(&tv, NULL);
-
- /* check how much time has passed */
- ok = 0;
- if (tv.tv_sec > last->tv_sec + 1)
- ok = 1;
- else if (tv.tv_sec == last->tv_sec + 1)
- {
- if (1000000 + tv.tv_usec - last->tv_usec >= RESEED_INTERVAL)
- ok = 1;
- }
- else if (tv.tv_usec - last->tv_usec >= RESEED_INTERVAL)
- ok = 1;
-
- /* reseed will happen, update last_reseed_time */
- if (ok)
- memcpy(last, &tv, sizeof(tv));
-
- memset(&tv, 0, sizeof(tv));
-
- return ok;
-}
-
-/*
- * generate new key from all the pools
- */
-static void
-reseed(FState *st)
-{
- unsigned k;
- unsigned n;
- MD_CTX key_md;
- uint8 buf[BLOCK];
-
- /* set pool as empty */
- st->pool0_bytes = 0;
-
- /*
- * Both #0 and #1 reseed would use only pool 0. Just skip #0 then.
- */
- n = ++st->reseed_count;
-
- /*
- * The goal: use k-th pool only 1/(2^k) of the time.
- */
- md_init(&key_md);
- for (k = 0; k < NUM_POOLS; k++)
- {
- md_result(&st->pool[k], buf);
- md_update(&key_md, buf, BLOCK);
-
- if (n & 1 || !n)
- break;
- n >>= 1;
- }
-
- /* add old key into mix too */
- md_update(&key_md, st->key, BLOCK);
-
- /* now we have new key */
- md_result(&key_md, st->key);
-
- /* use new key */
- ciph_init(&st->ciph, st->key, BLOCK);
-
- memset(&key_md, 0, sizeof(key_md));
- memset(buf, 0, BLOCK);
-}
-
-/*
- * Pick a random pool. This uses key bytes as random source.
- */
-static unsigned
-get_rand_pool(FState *st)
-{
- unsigned rnd;
-
- /*
- * This slightly prefers lower pools - thats OK.
- */
- rnd = st->key[st->rnd_pos] % NUM_POOLS;
-
- st->rnd_pos++;
- if (st->rnd_pos >= BLOCK)
- st->rnd_pos = 0;
-
- return rnd;
-}
-
-/*
- * update pools
- */
-static void
-add_entropy(FState *st, const uint8 *data, unsigned len)
-{
- unsigned pos;
- uint8 hash[BLOCK];
- MD_CTX md;
-
- /* hash given data */
- md_init(&md);
- md_update(&md, data, len);
- md_result(&md, hash);
-
- /*
- * Make sure the pool 0 is initialized, then update randomly.
- */
- if (st->reseed_count == 0)
- pos = 0;
- else
- pos = get_rand_pool(st);
- md_update(&st->pool[pos], hash, BLOCK);
-
- if (pos == 0)
- st->pool0_bytes += len;
-
- memset(hash, 0, BLOCK);
- memset(&md, 0, sizeof(md));
-}
-
-/*
- * Just take 2 next blocks as new key
- */
-static void
-rekey(FState *st)
-{
- encrypt_counter(st, st->key);
- encrypt_counter(st, st->key + CIPH_BLOCK);
- ciph_init(&st->ciph, st->key, BLOCK);
-}
-
-/*
- * Hide public constants. (counter, pools > 0)
- *
- * This can also be viewed as spreading the startup
- * entropy over all of the components.
- */
-static void
-startup_tricks(FState *st)
-{
- int i;
- uint8 buf[BLOCK];
-
- /* Use next block as counter. */
- encrypt_counter(st, st->counter);
-
- /* Now shuffle pools, excluding #0 */
- for (i = 1; i < NUM_POOLS; i++)
- {
- encrypt_counter(st, buf);
- encrypt_counter(st, buf + CIPH_BLOCK);
- md_update(&st->pool[i], buf, BLOCK);
- }
- memset(buf, 0, BLOCK);
-
- /* Hide the key. */
- rekey(st);
-
- /* This can be done only once. */
- st->tricks_done = 1;
-}
-
-static void
-extract_data(FState *st, unsigned count, uint8 *dst)
-{
- unsigned n;
- unsigned block_nr = 0;
-
- /* Should we reseed? */
- if (st->pool0_bytes >= POOL0_FILL || st->reseed_count == 0)
- if (enough_time_passed(st))
- reseed(st);
-
- /* Do some randomization on first call */
- if (!st->tricks_done)
- startup_tricks(st);
-
- while (count > 0)
- {
- /* produce bytes */
- encrypt_counter(st, st->result);
-
- /* copy result */
- if (count > CIPH_BLOCK)
- n = CIPH_BLOCK;
- else
- n = count;
- memcpy(dst, st->result, n);
- dst += n;
- count -= n;
-
- /* must not give out too many bytes with one key */
- block_nr++;
- if (block_nr > (RESEED_BYTES / CIPH_BLOCK))
- {
- rekey(st);
- block_nr = 0;
- }
- }
- /* Set new key for next request. */
- rekey(st);
-}
-
-/*
- * public interface
- */
-
-static FState main_state;
-static int init_done = 0;
-
-void
-fortuna_add_entropy(const uint8 *data, unsigned len)
-{
- if (!init_done)
- {
- init_state(&main_state);
- init_done = 1;
- }
- if (!data || !len)
- return;
- add_entropy(&main_state, data, len);
-}
-
-void
-fortuna_get_bytes(unsigned len, uint8 *dst)
-{
- if (!init_done)
- {
- init_state(&main_state);
- init_done = 1;
- }
- if (!dst || !len)
- return;
- extract_data(&main_state, len, dst);
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/fortuna.h
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/fortuna.h b/contrib/pgcrypto/fortuna.h
deleted file mode 100644
index b4d7064..0000000
--- a/contrib/pgcrypto/fortuna.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * fortuna.c
- * Fortuna PRNG.
- *
- * Copyright (c) 2005 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/fortuna.h,v 1.3 2005/10/15 02:49:06 momjian Exp $
- */
-
-#ifndef __FORTUNA_H
-#define __FORTUNA_H
-
-void fortuna_get_bytes(unsigned len, uint8 *dst);
-void fortuna_add_entropy(const uint8 *data, unsigned len);
-
-#endif
[02/11] incubator-hawq git commit: HAWQ-394. Remove pgcrypto from
code base
Posted by hu...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sha2.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sha2.c b/contrib/pgcrypto/sha2.c
deleted file mode 100644
index 9cd58a0..0000000
--- a/contrib/pgcrypto/sha2.c
+++ /dev/null
@@ -1,991 +0,0 @@
-/* $OpenBSD: sha2.c,v 1.6 2004/05/03 02:57:36 millert Exp $ */
-
-/*
- * FILE: sha2.c
- * AUTHOR: Aaron D. Gifford <me...@aarongifford.com>
- *
- * Copyright (c) 2000-2001, Aaron D. Gifford
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holder nor the names of contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $From: sha2.c,v 1.1 2001/11/08 00:01:51 adg Exp adg $
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/sha2.c,v 1.11 2009/06/11 14:48:52 momjian Exp $
- */
-
-#include "postgres.h"
-
-#include <sys/param.h>
-
-#include "sha2.h"
-
-/*
- * UNROLLED TRANSFORM LOOP NOTE:
- * You can define SHA2_UNROLL_TRANSFORM to use the unrolled transform
- * loop version for the hash transform rounds (defined using macros
- * later in this file). Either define on the command line, for example:
- *
- * cc -DSHA2_UNROLL_TRANSFORM -o sha2 sha2.c sha2prog.c
- *
- * or define below:
- *
- * #define SHA2_UNROLL_TRANSFORM
- *
- */
-
-/*** SHA-256/384/512 Various Length Definitions ***********************/
-/* NOTE: Most of these are in sha2.h */
-#define SHA256_SHORT_BLOCK_LENGTH (SHA256_BLOCK_LENGTH - 8)
-#define SHA384_SHORT_BLOCK_LENGTH (SHA384_BLOCK_LENGTH - 16)
-#define SHA512_SHORT_BLOCK_LENGTH (SHA512_BLOCK_LENGTH - 16)
-
-
-/*** ENDIAN REVERSAL MACROS *******************************************/
-#ifndef WORDS_BIGENDIAN
-#define REVERSE32(w,x) { \
- uint32 tmp = (w); \
- tmp = (tmp >> 16) | (tmp << 16); \
- (x) = ((tmp & 0xff00ff00UL) >> 8) | ((tmp & 0x00ff00ffUL) << 8); \
-}
-#define REVERSE64(w,x) { \
- uint64 tmp = (w); \
- tmp = (tmp >> 32) | (tmp << 32); \
- tmp = ((tmp & 0xff00ff00ff00ff00ULL) >> 8) | \
- ((tmp & 0x00ff00ff00ff00ffULL) << 8); \
- (x) = ((tmp & 0xffff0000ffff0000ULL) >> 16) | \
- ((tmp & 0x0000ffff0000ffffULL) << 16); \
-}
-#endif /* not bigendian */
-
-/*
- * Macro for incrementally adding the unsigned 64-bit integer n to the
- * unsigned 128-bit integer (represented using a two-element array of
- * 64-bit words):
- */
-#define ADDINC128(w,n) { \
- (w)[0] += (uint64)(n); \
- if ((w)[0] < (n)) { \
- (w)[1]++; \
- } \
-}
-
-/*** THE SIX LOGICAL FUNCTIONS ****************************************/
-/*
- * Bit shifting and rotation (used by the six SHA-XYZ logical functions:
- *
- * NOTE: The naming of R and S appears backwards here (R is a SHIFT and
- * S is a ROTATION) because the SHA-256/384/512 description document
- * (see http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf) uses this
- * same "backwards" definition.
- */
-/* Shift-right (used in SHA-256, SHA-384, and SHA-512): */
-#define R(b,x) ((x) >> (b))
-/* 32-bit Rotate-right (used in SHA-256): */
-#define S32(b,x) (((x) >> (b)) | ((x) << (32 - (b))))
-/* 64-bit Rotate-right (used in SHA-384 and SHA-512): */
-#define S64(b,x) (((x) >> (b)) | ((x) << (64 - (b))))
-
-/* Two of six logical functions used in SHA-256, SHA-384, and SHA-512: */
-#define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z)))
-#define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
-
-/* Four of six logical functions used in SHA-256: */
-#define Sigma0_256(x) (S32(2, (x)) ^ S32(13, (x)) ^ S32(22, (x)))
-#define Sigma1_256(x) (S32(6, (x)) ^ S32(11, (x)) ^ S32(25, (x)))
-#define sigma0_256(x) (S32(7, (x)) ^ S32(18, (x)) ^ R(3 , (x)))
-#define sigma1_256(x) (S32(17, (x)) ^ S32(19, (x)) ^ R(10, (x)))
-
-/* Four of six logical functions used in SHA-384 and SHA-512: */
-#define Sigma0_512(x) (S64(28, (x)) ^ S64(34, (x)) ^ S64(39, (x)))
-#define Sigma1_512(x) (S64(14, (x)) ^ S64(18, (x)) ^ S64(41, (x)))
-#define sigma0_512(x) (S64( 1, (x)) ^ S64( 8, (x)) ^ R( 7, (x)))
-#define sigma1_512(x) (S64(19, (x)) ^ S64(61, (x)) ^ R( 6, (x)))
-
-/*** INTERNAL FUNCTION PROTOTYPES *************************************/
-/* NOTE: These should not be accessed directly from outside this
- * library -- they are intended for private internal visibility/use
- * only.
- */
-static void SHA512_Last(SHA512_CTX *);
-static void SHA256_Transform(SHA256_CTX *, const uint8 *);
-static void SHA512_Transform(SHA512_CTX *, const uint8 *);
-
-
-/*** SHA-XYZ INITIAL HASH VALUES AND CONSTANTS ************************/
-/* Hash constant words K for SHA-256: */
-static const uint32 K256[64] = {
- 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL,
- 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL,
- 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL,
- 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL,
- 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL,
- 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL,
- 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL,
- 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL,
- 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL,
- 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
- 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL,
- 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL,
- 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL,
- 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL,
- 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
- 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL
-};
-
-/* Initial hash value H for SHA-224: */
-static const uint32 sha224_initial_hash_value[8] = {
- 0xc1059ed8UL,
- 0x367cd507UL,
- 0x3070dd17UL,
- 0xf70e5939UL,
- 0xffc00b31UL,
- 0x68581511UL,
- 0x64f98fa7UL,
- 0xbefa4fa4UL
-};
-
-/* Initial hash value H for SHA-256: */
-static const uint32 sha256_initial_hash_value[8] = {
- 0x6a09e667UL,
- 0xbb67ae85UL,
- 0x3c6ef372UL,
- 0xa54ff53aUL,
- 0x510e527fUL,
- 0x9b05688cUL,
- 0x1f83d9abUL,
- 0x5be0cd19UL
-};
-
-/* Hash constant words K for SHA-384 and SHA-512: */
-static const uint64 K512[80] = {
- 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL,
- 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL,
- 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
- 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL,
- 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL,
- 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
- 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL,
- 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL,
- 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
- 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL,
- 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL,
- 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
- 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL,
- 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL,
- 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
- 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL,
- 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL,
- 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
- 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL,
- 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL,
- 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
- 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL,
- 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL,
- 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
- 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL,
- 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL,
- 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
- 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL,
- 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL,
- 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
- 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL,
- 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL,
- 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
- 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL,
- 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL,
- 0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
- 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL,
- 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL,
- 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
- 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL
-};
-
-/* Initial hash value H for SHA-384 */
-static const uint64 sha384_initial_hash_value[8] = {
- 0xcbbb9d5dc1059ed8ULL,
- 0x629a292a367cd507ULL,
- 0x9159015a3070dd17ULL,
- 0x152fecd8f70e5939ULL,
- 0x67332667ffc00b31ULL,
- 0x8eb44a8768581511ULL,
- 0xdb0c2e0d64f98fa7ULL,
- 0x47b5481dbefa4fa4ULL
-};
-
-/* Initial hash value H for SHA-512 */
-static const uint64 sha512_initial_hash_value[8] = {
- 0x6a09e667f3bcc908ULL,
- 0xbb67ae8584caa73bULL,
- 0x3c6ef372fe94f82bULL,
- 0xa54ff53a5f1d36f1ULL,
- 0x510e527fade682d1ULL,
- 0x9b05688c2b3e6c1fULL,
- 0x1f83d9abfb41bd6bULL,
- 0x5be0cd19137e2179ULL
-};
-
-
-/*** SHA-256: *********************************************************/
-void
-SHA256_Init(SHA256_CTX *context)
-{
- if (context == NULL)
- return;
- memcpy(context->state, sha256_initial_hash_value, SHA256_DIGEST_LENGTH);
- memset(context->buffer, 0, SHA256_BLOCK_LENGTH);
- context->bitcount = 0;
-}
-
-#ifdef SHA2_UNROLL_TRANSFORM
-
-/* Unrolled SHA-256 round macros: */
-
-#define ROUND256_0_TO_15(a,b,c,d,e,f,g,h) do { \
- W256[j] = (uint32)data[3] | ((uint32)data[2] << 8) | \
- ((uint32)data[1] << 16) | ((uint32)data[0] << 24); \
- data += 4; \
- T1 = (h) + Sigma1_256((e)) + Ch((e), (f), (g)) + K256[j] + W256[j]; \
- (d) += T1; \
- (h) = T1 + Sigma0_256((a)) + Maj((a), (b), (c)); \
- j++; \
-} while(0)
-
-#define ROUND256(a,b,c,d,e,f,g,h) do { \
- s0 = W256[(j+1)&0x0f]; \
- s0 = sigma0_256(s0); \
- s1 = W256[(j+14)&0x0f]; \
- s1 = sigma1_256(s1); \
- T1 = (h) + Sigma1_256((e)) + Ch((e), (f), (g)) + K256[j] + \
- (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0); \
- (d) += T1; \
- (h) = T1 + Sigma0_256((a)) + Maj((a), (b), (c)); \
- j++; \
-} while(0)
-
-static void
-SHA256_Transform(SHA256_CTX *context, const uint8 *data)
-{
- uint32 a,
- b,
- c,
- d,
- e,
- f,
- g,
- h,
- s0,
- s1;
- uint32 T1,
- *W256;
- int j;
-
- W256 = (uint32 *) context->buffer;
-
- /* Initialize registers with the prev. intermediate value */
- a = context->state[0];
- b = context->state[1];
- c = context->state[2];
- d = context->state[3];
- e = context->state[4];
- f = context->state[5];
- g = context->state[6];
- h = context->state[7];
-
- j = 0;
- do
- {
- /* Rounds 0 to 15 (unrolled): */
- ROUND256_0_TO_15(a, b, c, d, e, f, g, h);
- ROUND256_0_TO_15(h, a, b, c, d, e, f, g);
- ROUND256_0_TO_15(g, h, a, b, c, d, e, f);
- ROUND256_0_TO_15(f, g, h, a, b, c, d, e);
- ROUND256_0_TO_15(e, f, g, h, a, b, c, d);
- ROUND256_0_TO_15(d, e, f, g, h, a, b, c);
- ROUND256_0_TO_15(c, d, e, f, g, h, a, b);
- ROUND256_0_TO_15(b, c, d, e, f, g, h, a);
- } while (j < 16);
-
- /* Now for the remaining rounds to 64: */
- do
- {
- ROUND256(a, b, c, d, e, f, g, h);
- ROUND256(h, a, b, c, d, e, f, g);
- ROUND256(g, h, a, b, c, d, e, f);
- ROUND256(f, g, h, a, b, c, d, e);
- ROUND256(e, f, g, h, a, b, c, d);
- ROUND256(d, e, f, g, h, a, b, c);
- ROUND256(c, d, e, f, g, h, a, b);
- ROUND256(b, c, d, e, f, g, h, a);
- } while (j < 64);
-
- /* Compute the current intermediate hash value */
- context->state[0] += a;
- context->state[1] += b;
- context->state[2] += c;
- context->state[3] += d;
- context->state[4] += e;
- context->state[5] += f;
- context->state[6] += g;
- context->state[7] += h;
-
- /* Clean up */
- a = b = c = d = e = f = g = h = T1 = 0;
-}
-#else /* SHA2_UNROLL_TRANSFORM */
-
-static void
-SHA256_Transform(SHA256_CTX *context, const uint8 *data)
-{
- uint32 a,
- b,
- c,
- d,
- e,
- f,
- g,
- h,
- s0,
- s1;
- uint32 T1,
- T2,
- *W256;
- int j;
-
- W256 = (uint32 *) context->buffer;
-
- /* Initialize registers with the prev. intermediate value */
- a = context->state[0];
- b = context->state[1];
- c = context->state[2];
- d = context->state[3];
- e = context->state[4];
- f = context->state[5];
- g = context->state[6];
- h = context->state[7];
-
- j = 0;
- do
- {
- W256[j] = (uint32) data[3] | ((uint32) data[2] << 8) |
- ((uint32) data[1] << 16) | ((uint32) data[0] << 24);
- data += 4;
- /* Apply the SHA-256 compression function to update a..h */
- T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + W256[j];
- T2 = Sigma0_256(a) + Maj(a, b, c);
- h = g;
- g = f;
- f = e;
- e = d + T1;
- d = c;
- c = b;
- b = a;
- a = T1 + T2;
-
- j++;
- } while (j < 16);
-
- do
- {
- /* Part of the message block expansion: */
- s0 = W256[(j + 1) & 0x0f];
- s0 = sigma0_256(s0);
- s1 = W256[(j + 14) & 0x0f];
- s1 = sigma1_256(s1);
-
- /* Apply the SHA-256 compression function to update a..h */
- T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] +
- (W256[j & 0x0f] += s1 + W256[(j + 9) & 0x0f] + s0);
- T2 = Sigma0_256(a) + Maj(a, b, c);
- h = g;
- g = f;
- f = e;
- e = d + T1;
- d = c;
- c = b;
- b = a;
- a = T1 + T2;
-
- j++;
- } while (j < 64);
-
- /* Compute the current intermediate hash value */
- context->state[0] += a;
- context->state[1] += b;
- context->state[2] += c;
- context->state[3] += d;
- context->state[4] += e;
- context->state[5] += f;
- context->state[6] += g;
- context->state[7] += h;
-
- /* Clean up */
- a = b = c = d = e = f = g = h = T1 = T2 = 0;
-}
-#endif /* SHA2_UNROLL_TRANSFORM */
-
-void
-SHA256_Update(SHA256_CTX *context, const uint8 *data, size_t len)
-{
- size_t freespace,
- usedspace;
-
- /* Calling with no data is valid (we do nothing) */
- if (len == 0)
- return;
-
- usedspace = (context->bitcount >> 3) % SHA256_BLOCK_LENGTH;
- if (usedspace > 0)
- {
- /* Calculate how much free space is available in the buffer */
- freespace = SHA256_BLOCK_LENGTH - usedspace;
-
- if (len >= freespace)
- {
- /* Fill the buffer completely and process it */
- memcpy(&context->buffer[usedspace], data, freespace);
- context->bitcount += freespace << 3;
- len -= freespace;
- data += freespace;
- SHA256_Transform(context, context->buffer);
- }
- else
- {
- /* The buffer is not yet full */
- memcpy(&context->buffer[usedspace], data, len);
- context->bitcount += len << 3;
- /* Clean up: */
- usedspace = freespace = 0;
- return;
- }
- }
- while (len >= SHA256_BLOCK_LENGTH)
- {
- /* Process as many complete blocks as we can */
- SHA256_Transform(context, data);
- context->bitcount += SHA256_BLOCK_LENGTH << 3;
- len -= SHA256_BLOCK_LENGTH;
- data += SHA256_BLOCK_LENGTH;
- }
- if (len > 0)
- {
- /* There's left-overs, so save 'em */
- memcpy(context->buffer, data, len);
- context->bitcount += len << 3;
- }
- /* Clean up: */
- usedspace = freespace = 0;
-}
-
-static void
-SHA256_Last(SHA256_CTX *context)
-{
- unsigned int usedspace;
-
- usedspace = (context->bitcount >> 3) % SHA256_BLOCK_LENGTH;
-#ifndef WORDS_BIGENDIAN
- /* Convert FROM host byte order */
- REVERSE64(context->bitcount, context->bitcount);
-#endif
- if (usedspace > 0)
- {
- /* Begin padding with a 1 bit: */
- context->buffer[usedspace++] = 0x80;
-
- if (usedspace <= SHA256_SHORT_BLOCK_LENGTH)
- {
- /* Set-up for the last transform: */
- memset(&context->buffer[usedspace], 0, SHA256_SHORT_BLOCK_LENGTH - usedspace);
- }
- else
- {
- if (usedspace < SHA256_BLOCK_LENGTH)
- {
- memset(&context->buffer[usedspace], 0, SHA256_BLOCK_LENGTH - usedspace);
- }
- /* Do second-to-last transform: */
- SHA256_Transform(context, context->buffer);
-
- /* And set-up for the last transform: */
- memset(context->buffer, 0, SHA256_SHORT_BLOCK_LENGTH);
- }
- }
- else
- {
- /* Set-up for the last transform: */
- memset(context->buffer, 0, SHA256_SHORT_BLOCK_LENGTH);
-
- /* Begin padding with a 1 bit: */
- *context->buffer = 0x80;
- }
- /* Set the bit count: */
- *(uint64 *) &context->buffer[SHA256_SHORT_BLOCK_LENGTH] = context->bitcount;
-
- /* Final transform: */
- SHA256_Transform(context, context->buffer);
-}
-
-void
-SHA256_Final(uint8 digest[], SHA256_CTX *context)
-{
- /* If no digest buffer is passed, we don't bother doing this: */
- if (digest != NULL)
- {
- SHA256_Last(context);
-
-#ifndef WORDS_BIGENDIAN
- {
- /* Convert TO host byte order */
- int j;
-
- for (j = 0; j < 8; j++)
- {
- REVERSE32(context->state[j], context->state[j]);
- }
- }
-#endif
- memcpy(digest, context->state, SHA256_DIGEST_LENGTH);
- }
-
- /* Clean up state data: */
- memset(context, 0, sizeof(*context));
-}
-
-
-/*** SHA-512: *********************************************************/
-void
-SHA512_Init(SHA512_CTX *context)
-{
- if (context == NULL)
- return;
- memcpy(context->state, sha512_initial_hash_value, SHA512_DIGEST_LENGTH);
- memset(context->buffer, 0, SHA512_BLOCK_LENGTH);
- context->bitcount[0] = context->bitcount[1] = 0;
-}
-
-#ifdef SHA2_UNROLL_TRANSFORM
-
-/* Unrolled SHA-512 round macros: */
-
-#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) do { \
- W512[j] = (uint64)data[7] | ((uint64)data[6] << 8) | \
- ((uint64)data[5] << 16) | ((uint64)data[4] << 24) | \
- ((uint64)data[3] << 32) | ((uint64)data[2] << 40) | \
- ((uint64)data[1] << 48) | ((uint64)data[0] << 56); \
- data += 8; \
- T1 = (h) + Sigma1_512((e)) + Ch((e), (f), (g)) + K512[j] + W512[j]; \
- (d) += T1; \
- (h) = T1 + Sigma0_512((a)) + Maj((a), (b), (c)); \
- j++; \
-} while(0)
-
-
-#define ROUND512(a,b,c,d,e,f,g,h) do { \
- s0 = W512[(j+1)&0x0f]; \
- s0 = sigma0_512(s0); \
- s1 = W512[(j+14)&0x0f]; \
- s1 = sigma1_512(s1); \
- T1 = (h) + Sigma1_512((e)) + Ch((e), (f), (g)) + K512[j] + \
- (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0); \
- (d) += T1; \
- (h) = T1 + Sigma0_512((a)) + Maj((a), (b), (c)); \
- j++; \
-} while(0)
-
-static void
-SHA512_Transform(SHA512_CTX *context, const uint8 *data)
-{
- uint64 a,
- b,
- c,
- d,
- e,
- f,
- g,
- h,
- s0,
- s1;
- uint64 T1,
- *W512 = (uint64 *) context->buffer;
- int j;
-
- /* Initialize registers with the prev. intermediate value */
- a = context->state[0];
- b = context->state[1];
- c = context->state[2];
- d = context->state[3];
- e = context->state[4];
- f = context->state[5];
- g = context->state[6];
- h = context->state[7];
-
- j = 0;
- do
- {
- ROUND512_0_TO_15(a, b, c, d, e, f, g, h);
- ROUND512_0_TO_15(h, a, b, c, d, e, f, g);
- ROUND512_0_TO_15(g, h, a, b, c, d, e, f);
- ROUND512_0_TO_15(f, g, h, a, b, c, d, e);
- ROUND512_0_TO_15(e, f, g, h, a, b, c, d);
- ROUND512_0_TO_15(d, e, f, g, h, a, b, c);
- ROUND512_0_TO_15(c, d, e, f, g, h, a, b);
- ROUND512_0_TO_15(b, c, d, e, f, g, h, a);
- } while (j < 16);
-
- /* Now for the remaining rounds up to 79: */
- do
- {
- ROUND512(a, b, c, d, e, f, g, h);
- ROUND512(h, a, b, c, d, e, f, g);
- ROUND512(g, h, a, b, c, d, e, f);
- ROUND512(f, g, h, a, b, c, d, e);
- ROUND512(e, f, g, h, a, b, c, d);
- ROUND512(d, e, f, g, h, a, b, c);
- ROUND512(c, d, e, f, g, h, a, b);
- ROUND512(b, c, d, e, f, g, h, a);
- } while (j < 80);
-
- /* Compute the current intermediate hash value */
- context->state[0] += a;
- context->state[1] += b;
- context->state[2] += c;
- context->state[3] += d;
- context->state[4] += e;
- context->state[5] += f;
- context->state[6] += g;
- context->state[7] += h;
-
- /* Clean up */
- a = b = c = d = e = f = g = h = T1 = 0;
-}
-#else /* SHA2_UNROLL_TRANSFORM */
-
-static void
-SHA512_Transform(SHA512_CTX *context, const uint8 *data)
-{
- uint64 a,
- b,
- c,
- d,
- e,
- f,
- g,
- h,
- s0,
- s1;
- uint64 T1,
- T2,
- *W512 = (uint64 *) context->buffer;
- int j;
-
- /* Initialize registers with the prev. intermediate value */
- a = context->state[0];
- b = context->state[1];
- c = context->state[2];
- d = context->state[3];
- e = context->state[4];
- f = context->state[5];
- g = context->state[6];
- h = context->state[7];
-
- j = 0;
- do
- {
- W512[j] = (uint64) data[7] | ((uint64) data[6] << 8) |
- ((uint64) data[5] << 16) | ((uint64) data[4] << 24) |
- ((uint64) data[3] << 32) | ((uint64) data[2] << 40) |
- ((uint64) data[1] << 48) | ((uint64) data[0] << 56);
- data += 8;
- /* Apply the SHA-512 compression function to update a..h */
- T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + W512[j];
- T2 = Sigma0_512(a) + Maj(a, b, c);
- h = g;
- g = f;
- f = e;
- e = d + T1;
- d = c;
- c = b;
- b = a;
- a = T1 + T2;
-
- j++;
- } while (j < 16);
-
- do
- {
- /* Part of the message block expansion: */
- s0 = W512[(j + 1) & 0x0f];
- s0 = sigma0_512(s0);
- s1 = W512[(j + 14) & 0x0f];
- s1 = sigma1_512(s1);
-
- /* Apply the SHA-512 compression function to update a..h */
- T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] +
- (W512[j & 0x0f] += s1 + W512[(j + 9) & 0x0f] + s0);
- T2 = Sigma0_512(a) + Maj(a, b, c);
- h = g;
- g = f;
- f = e;
- e = d + T1;
- d = c;
- c = b;
- b = a;
- a = T1 + T2;
-
- j++;
- } while (j < 80);
-
- /* Compute the current intermediate hash value */
- context->state[0] += a;
- context->state[1] += b;
- context->state[2] += c;
- context->state[3] += d;
- context->state[4] += e;
- context->state[5] += f;
- context->state[6] += g;
- context->state[7] += h;
-
- /* Clean up */
- a = b = c = d = e = f = g = h = T1 = T2 = 0;
-}
-#endif /* SHA2_UNROLL_TRANSFORM */
-
-void
-SHA512_Update(SHA512_CTX *context, const uint8 *data, size_t len)
-{
- size_t freespace,
- usedspace;
-
- /* Calling with no data is valid (we do nothing) */
- if (len == 0)
- return;
-
- usedspace = (context->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH;
- if (usedspace > 0)
- {
- /* Calculate how much free space is available in the buffer */
- freespace = SHA512_BLOCK_LENGTH - usedspace;
-
- if (len >= freespace)
- {
- /* Fill the buffer completely and process it */
- memcpy(&context->buffer[usedspace], data, freespace);
- ADDINC128(context->bitcount, freespace << 3);
- len -= freespace;
- data += freespace;
- SHA512_Transform(context, context->buffer);
- }
- else
- {
- /* The buffer is not yet full */
- memcpy(&context->buffer[usedspace], data, len);
- ADDINC128(context->bitcount, len << 3);
- /* Clean up: */
- usedspace = freespace = 0;
- return;
- }
- }
- while (len >= SHA512_BLOCK_LENGTH)
- {
- /* Process as many complete blocks as we can */
- SHA512_Transform(context, data);
- ADDINC128(context->bitcount, SHA512_BLOCK_LENGTH << 3);
- len -= SHA512_BLOCK_LENGTH;
- data += SHA512_BLOCK_LENGTH;
- }
- if (len > 0)
- {
- /* There's left-overs, so save 'em */
- memcpy(context->buffer, data, len);
- ADDINC128(context->bitcount, len << 3);
- }
- /* Clean up: */
- usedspace = freespace = 0;
-}
-
-static void
-SHA512_Last(SHA512_CTX *context)
-{
- unsigned int usedspace;
-
- usedspace = (context->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH;
-#ifndef WORDS_BIGENDIAN
- /* Convert FROM host byte order */
- REVERSE64(context->bitcount[0], context->bitcount[0]);
- REVERSE64(context->bitcount[1], context->bitcount[1]);
-#endif
- if (usedspace > 0)
- {
- /* Begin padding with a 1 bit: */
- context->buffer[usedspace++] = 0x80;
-
- if (usedspace <= SHA512_SHORT_BLOCK_LENGTH)
- {
- /* Set-up for the last transform: */
- memset(&context->buffer[usedspace], 0, SHA512_SHORT_BLOCK_LENGTH - usedspace);
- }
- else
- {
- if (usedspace < SHA512_BLOCK_LENGTH)
- {
- memset(&context->buffer[usedspace], 0, SHA512_BLOCK_LENGTH - usedspace);
- }
- /* Do second-to-last transform: */
- SHA512_Transform(context, context->buffer);
-
- /* And set-up for the last transform: */
- memset(context->buffer, 0, SHA512_BLOCK_LENGTH - 2);
- }
- }
- else
- {
- /* Prepare for final transform: */
- memset(context->buffer, 0, SHA512_SHORT_BLOCK_LENGTH);
-
- /* Begin padding with a 1 bit: */
- *context->buffer = 0x80;
- }
- /* Store the length of input data (in bits): */
- *(uint64 *) &context->buffer[SHA512_SHORT_BLOCK_LENGTH] = context->bitcount[1];
- *(uint64 *) &context->buffer[SHA512_SHORT_BLOCK_LENGTH + 8] = context->bitcount[0];
-
- /* Final transform: */
- SHA512_Transform(context, context->buffer);
-}
-
-void
-SHA512_Final(uint8 digest[], SHA512_CTX *context)
-{
- /* If no digest buffer is passed, we don't bother doing this: */
- if (digest != NULL)
- {
- SHA512_Last(context);
-
- /* Save the hash data for output: */
-#ifndef WORDS_BIGENDIAN
- {
- /* Convert TO host byte order */
- int j;
-
- for (j = 0; j < 8; j++)
- {
- REVERSE64(context->state[j], context->state[j]);
- }
- }
-#endif
- memcpy(digest, context->state, SHA512_DIGEST_LENGTH);
- }
-
- /* Zero out state data */
- memset(context, 0, sizeof(*context));
-}
-
-
-/*** SHA-384: *********************************************************/
-void
-SHA384_Init(SHA384_CTX *context)
-{
- if (context == NULL)
- return;
- memcpy(context->state, sha384_initial_hash_value, SHA512_DIGEST_LENGTH);
- memset(context->buffer, 0, SHA384_BLOCK_LENGTH);
- context->bitcount[0] = context->bitcount[1] = 0;
-}
-
-void
-SHA384_Update(SHA384_CTX *context, const uint8 *data, size_t len)
-{
- SHA512_Update((SHA512_CTX *) context, data, len);
-}
-
-void
-SHA384_Final(uint8 digest[], SHA384_CTX *context)
-{
- /* If no digest buffer is passed, we don't bother doing this: */
- if (digest != NULL)
- {
- SHA512_Last((SHA512_CTX *) context);
-
- /* Save the hash data for output: */
-#ifndef WORDS_BIGENDIAN
- {
- /* Convert TO host byte order */
- int j;
-
- for (j = 0; j < 6; j++)
- {
- REVERSE64(context->state[j], context->state[j]);
- }
- }
-#endif
- memcpy(digest, context->state, SHA384_DIGEST_LENGTH);
- }
-
- /* Zero out state data */
- memset(context, 0, sizeof(*context));
-}
-
-/*** SHA-224: *********************************************************/
-void
-SHA224_Init(SHA224_CTX *context)
-{
- if (context == NULL)
- return;
- memcpy(context->state, sha224_initial_hash_value, SHA256_DIGEST_LENGTH);
- memset(context->buffer, 0, SHA256_BLOCK_LENGTH);
- context->bitcount = 0;
-}
-
-void
-SHA224_Update(SHA224_CTX *context, const uint8 *data, size_t len)
-{
- SHA256_Update((SHA256_CTX *) context, data, len);
-}
-
-void
-SHA224_Final(uint8 digest[], SHA224_CTX *context)
-{
- /* If no digest buffer is passed, we don't bother doing this: */
- if (digest != NULL)
- {
- SHA256_Last(context);
-
-#ifndef WORDS_BIGENDIAN
- {
- /* Convert TO host byte order */
- int j;
-
- for (j = 0; j < 8; j++)
- {
- REVERSE32(context->state[j], context->state[j]);
- }
- }
-#endif
- memcpy(digest, context->state, SHA224_DIGEST_LENGTH);
- }
-
- /* Clean up state data: */
- memset(context, 0, sizeof(*context));
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sha2.h
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sha2.h b/contrib/pgcrypto/sha2.h
deleted file mode 100644
index 8d593c6..0000000
--- a/contrib/pgcrypto/sha2.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/pgcrypto/sha2.h,v 1.5 2009/06/11 14:48:52 momjian Exp $ */
-/* $OpenBSD: sha2.h,v 1.2 2004/04/28 23:11:57 millert Exp $ */
-
-/*
- * FILE: sha2.h
- * AUTHOR: Aaron D. Gifford <me...@aarongifford.com>
- *
- * Copyright (c) 2000-2001, Aaron D. Gifford
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holder nor the names of contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $From: sha2.h,v 1.1 2001/11/08 00:02:01 adg Exp adg $
- */
-
-#ifndef _SHA2_H
-#define _SHA2_H
-
-/* avoid conflict with OpenSSL */
-#define SHA256_Init pg_SHA256_Init
-#define SHA256_Update pg_SHA256_Update
-#define SHA256_Final pg_SHA256_Final
-#define SHA384_Init pg_SHA384_Init
-#define SHA384_Update pg_SHA384_Update
-#define SHA384_Final pg_SHA384_Final
-#define SHA512_Init pg_SHA512_Init
-#define SHA512_Update pg_SHA512_Update
-#define SHA512_Final pg_SHA512_Final
-
-/*** SHA-224/256/384/512 Various Length Definitions ***********************/
-#define SHA224_BLOCK_LENGTH 64
-#define SHA224_DIGEST_LENGTH 28
-#define SHA224_DIGEST_STRING_LENGTH (SHA224_DIGEST_LENGTH * 2 + 1)
-#define SHA256_BLOCK_LENGTH 64
-#define SHA256_DIGEST_LENGTH 32
-#define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2 + 1)
-#define SHA384_BLOCK_LENGTH 128
-#define SHA384_DIGEST_LENGTH 48
-#define SHA384_DIGEST_STRING_LENGTH (SHA384_DIGEST_LENGTH * 2 + 1)
-#define SHA512_BLOCK_LENGTH 128
-#define SHA512_DIGEST_LENGTH 64
-#define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1)
-
-
-/*** SHA-256/384/512 Context Structures *******************************/
-typedef struct _SHA256_CTX
-{
- uint32 state[8];
- uint64 bitcount;
- uint8 buffer[SHA256_BLOCK_LENGTH];
-} SHA256_CTX;
-typedef struct _SHA512_CTX
-{
- uint64 state[8];
- uint64 bitcount[2];
- uint8 buffer[SHA512_BLOCK_LENGTH];
-} SHA512_CTX;
-
-typedef SHA256_CTX SHA224_CTX;
-typedef SHA512_CTX SHA384_CTX;
-
-void SHA224_Init(SHA224_CTX *);
-void SHA224_Update(SHA224_CTX *, const uint8 *, size_t);
-void SHA224_Final(uint8[SHA224_DIGEST_LENGTH], SHA224_CTX *);
-
-void SHA256_Init(SHA256_CTX *);
-void SHA256_Update(SHA256_CTX *, const uint8 *, size_t);
-void SHA256_Final(uint8[SHA256_DIGEST_LENGTH], SHA256_CTX *);
-
-void SHA384_Init(SHA384_CTX *);
-void SHA384_Update(SHA384_CTX *, const uint8 *, size_t);
-void SHA384_Final(uint8[SHA384_DIGEST_LENGTH], SHA384_CTX *);
-
-void SHA512_Init(SHA512_CTX *);
-void SHA512_Update(SHA512_CTX *, const uint8 *, size_t);
-void SHA512_Final(uint8[SHA512_DIGEST_LENGTH], SHA512_CTX *);
-
-#endif /* _SHA2_H */
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/3des.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/3des.sql b/contrib/pgcrypto/sql/3des.sql
deleted file mode 100644
index 99b936f..0000000
--- a/contrib/pgcrypto/sql/3des.sql
+++ /dev/null
@@ -1,30 +0,0 @@
---
--- 3DES cipher
---
-
--- test vector from somewhere
-SELECT encode(encrypt(
-decode('80 00 00 00 00 00 00 00', 'hex'),
-decode('01 01 01 01 01 01 01 01
- 01 01 01 01 01 01 01 01
- 01 01 01 01 01 01 01 01', 'hex'),
-'3des-ecb/pad:none'), 'hex');
--- val 95 F8 A5 E5 DD 31 D9 00
-
-select encode( encrypt('', 'foo', '3des'), 'hex');
--- 10 bytes key
-select encode( encrypt('foo', '0123456789', '3des'), 'hex');
--- 22 bytes key
-select encode( encrypt('foo', '0123456789012345678901', '3des'), 'hex');
-
--- decrypt
-select decrypt(encrypt('foo', '0123456', '3des'), '0123456', '3des');
-
--- iv
-select encode(encrypt_iv('foo', '0123456', 'abcd', '3des'), 'hex');
-select decrypt_iv(decode('50735067b073bb93', 'hex'), '0123456', 'abcd', '3des');
-
--- long message
-select encode(encrypt('Lets try a longer message.', '0123456789012345678901', '3des'), 'hex');
-select decrypt(encrypt('Lets try a longer message.', '0123456789012345678901', '3des'), '0123456789012345678901', '3des');
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/blowfish.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/blowfish.sql b/contrib/pgcrypto/sql/blowfish.sql
deleted file mode 100644
index c0383f5..0000000
--- a/contrib/pgcrypto/sql/blowfish.sql
+++ /dev/null
@@ -1,91 +0,0 @@
---
--- Blowfish cipher
---
-
--- some standard Blowfish testvalues
-SELECT encode(encrypt(
-decode('0000000000000000', 'hex'),
-decode('0000000000000000', 'hex'),
-'bf-ecb/pad:none'), 'hex');
-
-SELECT encode(encrypt(
-decode('ffffffffffffffff', 'hex'),
-decode('ffffffffffffffff', 'hex'),
-'bf-ecb/pad:none'), 'hex');
-
-SELECT encode(encrypt(
-decode('1000000000000001', 'hex'),
-decode('3000000000000000', 'hex'),
-'bf-ecb/pad:none'), 'hex');
-
-SELECT encode(encrypt(
-decode('1111111111111111', 'hex'),
-decode('1111111111111111', 'hex'),
-'bf-ecb/pad:none'), 'hex');
-
-SELECT encode(encrypt(
-decode('0123456789abcdef', 'hex'),
-decode('fedcba9876543210', 'hex'),
-'bf-ecb/pad:none'), 'hex');
-
-SELECT encode(encrypt(
-decode('01a1d6d039776742', 'hex'),
-decode('fedcba9876543210', 'hex'),
-'bf-ecb/pad:none'), 'hex');
-
-SELECT encode(encrypt(
-decode('ffffffffffffffff', 'hex'),
-decode('0000000000000000', 'hex'),
-'bf-ecb/pad:none'), 'hex');
-
--- setkey
-SELECT encode(encrypt(
-decode('fedcba9876543210', 'hex'),
-decode('f0e1d2c3b4a5968778695a4b3c2d1e0f', 'hex'),
-'bf-ecb/pad:none'), 'hex');
-
--- with padding
-SELECT encode(encrypt(
-decode('01234567890123456789', 'hex'),
-decode('33443344334433443344334433443344', 'hex'),
-'bf-ecb'), 'hex');
-
--- cbc
-
--- 28 bytes key
-SELECT encode(encrypt(
-decode('6b77b4d63006dee605b156e27403979358deb9e7154616d959f1652bd5', 'hex'),
-decode('37363534333231204e6f77206973207468652074696d6520666f7220', 'hex'),
-'bf-cbc'), 'hex');
-
--- 29 bytes key
-SELECT encode(encrypt(
-decode('6b77b4d63006dee605b156e27403979358deb9e7154616d959f1652bd5ff92cc', 'hex'),
-decode('37363534333231204e6f77206973207468652074696d6520666f722000', 'hex'),
-'bf-cbc'), 'hex');
-
--- blowfish-448
-SELECT encode(encrypt(
-decode('fedcba9876543210', 'hex'),
-decode('f0e1d2c3b4a5968778695a4b3c2d1e0f001122334455667704689104c2fd3b2f584023641aba61761f1f1f1f0e0e0e0effffffffffffffff', 'hex'),
-'bf-ecb/pad:none'), 'hex');
--- result: c04504012e4e1f53
-
--- empty data
-select encode( encrypt('', 'foo', 'bf'), 'hex');
--- 10 bytes key
-select encode( encrypt('foo', '0123456789', 'bf'), 'hex');
--- 22 bytes key
-select encode( encrypt('foo', '0123456789012345678901', 'bf'), 'hex');
-
--- decrypt
-select decrypt(encrypt('foo', '0123456', 'bf'), '0123456', 'bf');
-
--- iv
-select encode(encrypt_iv('foo', '0123456', 'abcd', 'bf'), 'hex');
-select decrypt_iv(decode('95c7e89322525d59', 'hex'), '0123456', 'abcd', 'bf');
-
--- long message
-select encode(encrypt('Lets try a longer message.', '0123456789', 'bf'), 'hex');
-select decrypt(encrypt('Lets try a longer message.', '0123456789', 'bf'), '0123456789', 'bf');
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/cast5.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/cast5.sql b/contrib/pgcrypto/sql/cast5.sql
deleted file mode 100644
index 0761f34..0000000
--- a/contrib/pgcrypto/sql/cast5.sql
+++ /dev/null
@@ -1,46 +0,0 @@
---
--- Cast5 cipher
---
-
--- test vectors from RFC2144
-
--- 128 bit key
-SELECT encode(encrypt(
-decode('01 23 45 67 89 AB CD EF', 'hex'),
-decode('01 23 45 67 12 34 56 78 23 45 67 89 34 56 78 9A', 'hex'),
-'cast5-ecb/pad:none'), 'hex');
--- result: 23 8B 4F E5 84 7E 44 B2
-
--- 80 bit key
-SELECT encode(encrypt(
-decode('01 23 45 67 89 AB CD EF', 'hex'),
-decode('01 23 45 67 12 34 56 78 23 45', 'hex'),
-'cast5-ecb/pad:none'), 'hex');
--- result: EB 6A 71 1A 2C 02 27 1B
-
--- 40 bit key
-SELECT encode(encrypt(
-decode('01 23 45 67 89 AB CD EF', 'hex'),
-decode('01 23 45 67 12', 'hex'),
-'cast5-ecb/pad:none'), 'hex');
--- result: 7A C8 16 D1 6E 9B 30 2E
-
--- cbc
-
--- empty data
-select encode( encrypt('', 'foo', 'cast5'), 'hex');
--- 10 bytes key
-select encode( encrypt('foo', '0123456789', 'cast5'), 'hex');
-
--- decrypt
-select decrypt(encrypt('foo', '0123456', 'cast5'), '0123456', 'cast5');
-
--- iv
-select encode(encrypt_iv('foo', '0123456', 'abcd', 'cast5'), 'hex');
-select decrypt_iv(decode('384a970695ce016a', 'hex'),
- '0123456', 'abcd', 'cast5');
-
--- long message
-select encode(encrypt('Lets try a longer message.', '0123456789', 'cast5'), 'hex');
-select decrypt(encrypt('Lets try a longer message.', '0123456789', 'cast5'), '0123456789', 'cast5');
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/crypt-blowfish.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/crypt-blowfish.sql b/contrib/pgcrypto/sql/crypt-blowfish.sql
deleted file mode 100644
index effc186..0000000
--- a/contrib/pgcrypto/sql/crypt-blowfish.sql
+++ /dev/null
@@ -1,18 +0,0 @@
---
--- crypt() and gen_salt(): bcrypt
---
-
-SELECT crypt('', '$2a$06$RQiOJ.3ELirrXwxIZY8q0O');
-
-SELECT crypt('foox', '$2a$06$RQiOJ.3ELirrXwxIZY8q0O');
-
-CREATE TABLE ctest (data text, res text, salt text);
-INSERT INTO ctest VALUES ('password', '', '');
-
-UPDATE ctest SET salt = gen_salt('bf', 8);
-UPDATE ctest SET res = crypt(data, salt);
-SELECT res = crypt(data, res) AS "worked"
-FROM ctest;
-
-DROP TABLE ctest;
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/crypt-des.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/crypt-des.sql b/contrib/pgcrypto/sql/crypt-des.sql
deleted file mode 100644
index b13d2f9..0000000
--- a/contrib/pgcrypto/sql/crypt-des.sql
+++ /dev/null
@@ -1,18 +0,0 @@
---
--- crypt() and gen_salt(): crypt-des
---
-
-SELECT crypt('', 'NB');
-
-SELECT crypt('foox', 'NB');
-
-CREATE TABLE ctest (data text, res text, salt text);
-INSERT INTO ctest VALUES ('password', '', '');
-
-UPDATE ctest SET salt = gen_salt('des');
-UPDATE ctest SET res = crypt(data, salt);
-SELECT res = crypt(data, res) AS "worked"
-FROM ctest;
-
-DROP TABLE ctest;
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/crypt-md5.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/crypt-md5.sql b/contrib/pgcrypto/sql/crypt-md5.sql
deleted file mode 100644
index 0002f0d..0000000
--- a/contrib/pgcrypto/sql/crypt-md5.sql
+++ /dev/null
@@ -1,18 +0,0 @@
---
--- crypt() and gen_salt(): md5
---
-
-SELECT crypt('', '$1$Szzz0yzz');
-
-SELECT crypt('foox', '$1$Szzz0yzz');
-
-CREATE TABLE ctest (data text, res text, salt text);
-INSERT INTO ctest VALUES ('password', '', '');
-
-UPDATE ctest SET salt = gen_salt('md5');
-UPDATE ctest SET res = crypt(data, salt);
-SELECT res = crypt(data, res) AS "worked"
-FROM ctest;
-
-DROP TABLE ctest;
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/crypt-xdes.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/crypt-xdes.sql b/contrib/pgcrypto/sql/crypt-xdes.sql
deleted file mode 100644
index 51271db..0000000
--- a/contrib/pgcrypto/sql/crypt-xdes.sql
+++ /dev/null
@@ -1,18 +0,0 @@
---
--- crypt() and gen_salt(): extended des
---
-
-SELECT crypt('', '_J9..j2zz');
-
-SELECT crypt('foox', '_J9..j2zz');
-
-CREATE TABLE ctest (data text, res text, salt text);
-INSERT INTO ctest VALUES ('password', '', '');
-
-UPDATE ctest SET salt = gen_salt('xdes', 1001);
-UPDATE ctest SET res = crypt(data, salt);
-SELECT res = crypt(data, res) AS "worked"
-FROM ctest;
-
-DROP TABLE ctest;
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/des.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/des.sql b/contrib/pgcrypto/sql/des.sql
deleted file mode 100644
index 179bd83..0000000
--- a/contrib/pgcrypto/sql/des.sql
+++ /dev/null
@@ -1,28 +0,0 @@
---
--- DES cipher
---
-
--- no official test vectors atm
-
--- from blowfish.sql
-SELECT encode(encrypt(
-decode('0123456789abcdef', 'hex'),
-decode('fedcba9876543210', 'hex'),
-'des-ecb/pad:none'), 'hex');
-
--- empty data
-select encode( encrypt('', 'foo', 'des'), 'hex');
--- 8 bytes key
-select encode( encrypt('foo', '01234589', 'des'), 'hex');
-
--- decrypt
-select decrypt(encrypt('foo', '0123456', 'des'), '0123456', 'des');
-
--- iv
-select encode(encrypt_iv('foo', '0123456', 'abcd', 'des'), 'hex');
-select decrypt_iv(decode('50735067b073bb93', 'hex'), '0123456', 'abcd', 'des');
-
--- long message
-select encode(encrypt('Lets try a longer message.', '01234567', 'des'), 'hex');
-select decrypt(encrypt('Lets try a longer message.', '01234567', 'des'), '01234567', 'des');
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/hmac-md5.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/hmac-md5.sql b/contrib/pgcrypto/sql/hmac-md5.sql
deleted file mode 100644
index 70bef7c..0000000
--- a/contrib/pgcrypto/sql/hmac-md5.sql
+++ /dev/null
@@ -1,46 +0,0 @@
---
--- HMAC-MD5
---
-
-SELECT encode(hmac(
-'Hi There',
-decode('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b', 'hex'),
-'md5'), 'hex');
-
--- 2
-SELECT encode(hmac(
-'Jefe',
-'what do ya want for nothing?',
-'md5'), 'hex');
-
--- 3
-SELECT encode(hmac(
-decode('dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd', 'hex'),
-decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'),
-'md5'), 'hex');
-
--- 4
-SELECT encode(hmac(
-decode('cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd', 'hex'),
-decode('0102030405060708090a0b0c0d0e0f10111213141516171819', 'hex'),
-'md5'), 'hex');
-
--- 5
-SELECT encode(hmac(
-'Test With Truncation',
-decode('0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c', 'hex'),
-'md5'), 'hex');
-
--- 6
-SELECT encode(hmac(
-'Test Using Larger Than Block-Size Key - Hash Key First',
-decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'),
-'md5'), 'hex');
-
--- 7
-SELECT encode(hmac(
-'Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data',
-decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'),
-'md5'), 'hex');
-
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/hmac-sha1.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/hmac-sha1.sql b/contrib/pgcrypto/sql/hmac-sha1.sql
deleted file mode 100644
index 4adf6ed..0000000
--- a/contrib/pgcrypto/sql/hmac-sha1.sql
+++ /dev/null
@@ -1,46 +0,0 @@
---
--- HMAC-MD5
---
-
-SELECT encode(hmac(
-'Hi There',
-decode('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b', 'hex'),
-'sha1'), 'hex');
-
--- 2
-SELECT encode(hmac(
-'Jefe',
-'what do ya want for nothing?',
-'sha1'), 'hex');
-
--- 3
-SELECT encode(hmac(
-decode('dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd', 'hex'),
-decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'),
-'sha1'), 'hex');
-
--- 4
-SELECT encode(hmac(
-decode('cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd', 'hex'),
-decode('0102030405060708090a0b0c0d0e0f10111213141516171819', 'hex'),
-'sha1'), 'hex');
-
--- 5
-SELECT encode(hmac(
-'Test With Truncation',
-decode('0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c', 'hex'),
-'sha1'), 'hex');
-
--- 6
-SELECT encode(hmac(
-'Test Using Larger Than Block-Size Key - Hash Key First',
-decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'),
-'sha1'), 'hex');
-
--- 7
-SELECT encode(hmac(
-'Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data',
-decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'),
-'sha1'), 'hex');
-
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/init.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/init.sql b/contrib/pgcrypto/sql/init.sql
deleted file mode 100644
index d11d131..0000000
--- a/contrib/pgcrypto/sql/init.sql
+++ /dev/null
@@ -1,18 +0,0 @@
---
--- init pgcrypto
---
-
-\set ECHO none
-\i pgcrypto.sql
-\set ECHO all
-
--- check for encoding fn's
-SELECT encode('foo', 'hex');
-SELECT pg_catalog.decode('666f6f', 'hex');
-
--- check error handling
-select gen_salt('foo');
-select digest('foo', 'foo');
-select hmac('foo', 'foo', 'foo');
-select encrypt('foo', 'foo', 'foo');
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/md5.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/md5.sql b/contrib/pgcrypto/sql/md5.sql
deleted file mode 100644
index d6e5027..0000000
--- a/contrib/pgcrypto/sql/md5.sql
+++ /dev/null
@@ -1,12 +0,0 @@
---
--- MD5 message digest
---
-
-SELECT encode(digest('', 'md5'), 'hex');
-SELECT encode(digest('a', 'md5'), 'hex');
-SELECT encode(digest('abc', 'md5'), 'hex');
-SELECT encode(digest('message digest', 'md5'), 'hex');
-SELECT encode(digest('abcdefghijklmnopqrstuvwxyz', 'md5'), 'hex');
-SELECT encode(digest('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'md5'), 'hex');
-SELECT encode(digest('12345678901234567890123456789012345678901234567890123456789012345678901234567890', 'md5'), 'hex');
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/pgp-armor.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/pgp-armor.sql b/contrib/pgcrypto/sql/pgp-armor.sql
deleted file mode 100644
index 040c4ac..0000000
--- a/contrib/pgcrypto/sql/pgp-armor.sql
+++ /dev/null
@@ -1,56 +0,0 @@
---
--- PGP Armor
---
-
-select armor('');
-select armor('test');
-select dearmor(armor(''));
-select dearmor(armor('zooka'));
-
-select armor('0123456789abcdef0123456789abcdef0123456789abcdef
-0123456789abcdef0123456789abcdef0123456789abcdef');
-
--- lots formatting
-select dearmor(' a pgp msg:
-
------BEGIN PGP MESSAGE-----
-Comment: Some junk
-
-em9va2E=
-
- =D5cR
-
------END PGP MESSAGE-----');
-
--- lots messages
-select dearmor('
-wrong packet:
- -----BEGIN PGP MESSAGE-----
-
- d3Jvbmc=
- =vCYP
- -----END PGP MESSAGE-----
-
-right packet:
------BEGIN PGP MESSAGE-----
-
-cmlnaHQ=
-=nbpj
------END PGP MESSAGE-----
-
-use only first packet
------BEGIN PGP MESSAGE-----
-
-d3Jvbmc=
-=vCYP
------END PGP MESSAGE-----
-');
-
--- bad crc
-select dearmor('
------BEGIN PGP MESSAGE-----
-
-em9va2E=
-=ZZZZ
------END PGP MESSAGE-----
-');
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/pgp-compression.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/pgp-compression.sql b/contrib/pgcrypto/sql/pgp-compression.sql
deleted file mode 100644
index f71c176..0000000
--- a/contrib/pgcrypto/sql/pgp-compression.sql
+++ /dev/null
@@ -1,31 +0,0 @@
---
--- PGP compression support
---
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-
-ww0ECQMCsci6AdHnELlh0kQB4jFcVwHMJg0Bulop7m3Mi36s15TAhBo0AnzIrRFrdLVCkKohsS6+
-DMcmR53SXfLoDJOv/M8uKj3QSq7oWNIp95pxfA==
-=tbSn
------END PGP MESSAGE-----
-'), 'key', 'expect-compress-algo=1');
-
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret message', 'key', 'compress-algo=0'),
- 'key', 'expect-compress-algo=0');
-
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret message', 'key', 'compress-algo=1'),
- 'key', 'expect-compress-algo=1');
-
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret message', 'key', 'compress-algo=2'),
- 'key', 'expect-compress-algo=2');
-
--- level=0 should turn compression off
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret message', 'key',
- 'compress-algo=2, compress-level=0'),
- 'key', 'expect-compress-algo=0');
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/pgp-decrypt.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/pgp-decrypt.sql b/contrib/pgcrypto/sql/pgp-decrypt.sql
deleted file mode 100644
index 93535ab..0000000
--- a/contrib/pgcrypto/sql/pgp-decrypt.sql
+++ /dev/null
@@ -1,266 +0,0 @@
---
--- pgp_descrypt tests
---
-
--- Checking ciphers
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.blowfish.sha1.mdc.s2k3.z0
-
-jA0EBAMCfFNwxnvodX9g0jwB4n4s26/g5VmKzVab1bX1SmwY7gvgvlWdF3jKisvS
-yA6Ce1QTMK3KdL2MPfamsTUSAML8huCJMwYQFfE=
-=JcP+
------END PGP MESSAGE-----
-'), 'foobar');
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.mdc.s2k3.z0
-
-jA0EBwMCci97v0Q6Z0Zg0kQBsVf5Oe3iC+FBzUmuMV9KxmAyOMyjCc/5i8f1Eest
-UTAsG35A1vYs02VARKzGz6xI2UHwFUirP+brPBg3Ee7muOx8pA==
-=XtrP
------END PGP MESSAGE-----
-'), 'foobar');
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes192.sha1.mdc.s2k3.z0
-
-jA0ECAMCI7YQpWqp3D1g0kQBCjB7GlX7+SQeXNleXeXQ78ZAPNliquGDq9u378zI
-5FPTqAhIB2/2fjY8QEIs1ai00qphjX2NitxV/3Wn+6dufB4Q4g==
-=rCZt
------END PGP MESSAGE-----
-'), 'foobar');
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes256.sha1.mdc.s2k3.z0
-
-jA0ECQMC4f/5djqCC1Rg0kQBTHEPsD+Sw7biBsM2er3vKyGPAQkuTBGKC5ie7hT/
-lceMfQdbAg6oTFyJpk/wH18GzRDphCofg0X8uLgkAKMrpcmgog==
-=fB6S
------END PGP MESSAGE-----
-'), 'foobar');
-
--- Checking MDC modes
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.nomdc.s2k3.z0
-
-jA0EBwMCnv07rlXqWctgyS2Dm2JfOKCRL4sLSLJUC8RS2cH7cIhKSuLitOtyquB+
-u9YkgfJfsuRJmgQ9tmo=
-=60ui
------END PGP MESSAGE-----
-'), 'foobar');
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.mdc.s2k3.z0
-
-jA0EBwMCEeP3idNjQ1Bg0kQBf4G0wX+2QNzLh2YNwYkQgQkfYhn/hLXjV4nK9nsE
-8Ex1Dsdt5UPvOz8W8VKQRS6loOfOe+yyXil8W3IYFwUpdDUi+Q==
-=moGf
------END PGP MESSAGE-----
-'), 'foobar');
-
--- Checking hashes
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.md5.mdc.s2k3.z0
-
-jA0EBwMClrXXtOXetohg0kQBn0Kl1ymevQZRHkdoYRHgzCwSQEiss7zYff2UNzgO
-KyRrHf7zEBuZiZ2AG34jNVMOLToj1jJUg5zTSdecUzQVCykWTA==
-=NyLk
------END PGP MESSAGE-----
-'), 'foobar');
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.mdc.s2k3.z0
-
-jA0EBwMCApbdlrURoWJg0kQBzHM/E0o7djY82bNuspjxjAcPFrrtp0uvDdMQ4z2m
-/PM8jhgI5vxFYfNQjLl8y3fHYIomk9YflN9K/Q13iq8A8sjeTw==
-=FxbQ
------END PGP MESSAGE-----
-'), 'foobar');
-
--- Checking S2K modes
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.mdc.s2k0.z0
-
-jAQEBwAC0kQBKTaLAKE3xzps+QIZowqRNb2eAdzBw2LxEW2YD5PgNlbhJdGg+dvw
-Ah9GXjGS1TVALzTImJbz1uHUZRfhJlFbc5yGQw==
-=YvkV
------END PGP MESSAGE-----
-'), 'foobar');
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.mdc.s2k1.z0
-
-jAwEBwEC/QTByBLI3b/SRAHPxKzI6SZBo5lAEOD+EsvKQWO4adL9tDY+++Iqy1xK
-4IaWXVKEj9R2Lr2xntWWMGZtcKtjD2lFFRXXd9dZp1ZThNDz
-=dbXm
------END PGP MESSAGE-----
-'), 'foobar');
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.mdc.s2k3.z0
-
-jA0EBwMCEq4Su3ZqNEJg0kQB4QG5jBTKF0i04xtH+avzmLhstBNRxvV3nsmB3cwl
-z+9ZaA/XdSx5ZiFnMym8P6r8uY9rLjjNptvvRHlxIReF+p9MNg==
-=VJKg
------END PGP MESSAGE-----
-'), 'foobar');
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes192.sha1.mdc.s2k0.z0
-
-jAQECAAC0kQBBDnQWkgsx9YFaqDfWmpsiyAJ6y2xG/sBvap1dySYEMuZ+wJTXQ9E
-Cr3i2M7TgVZ0M4jp4QL0adG1lpN5iK7aQeOwMw==
-=cg+i
------END PGP MESSAGE-----
-'), 'foobar');
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes192.sha1.mdc.s2k1.z0
-
-jAwECAECruOfyNDFiTnSRAEVoGXm4A9UZKkWljdzjEO/iaE7mIraltIpQMkiqCh9
-7h8uZ2u9uRBOv222fZodGvc6bvq/4R4hAa/6qSHtm8mdmvGt
-=aHmC
------END PGP MESSAGE-----
-'), 'foobar');
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes192.sha1.mdc.s2k3.z0
-
-jA0ECAMCjFn6SRi3SONg0kQBqtSHPaD0m7rXfDAhCWU/ypAsI93GuHGRyM99cvMv
-q6eF6859ZVnli3BFSDSk3a4e/pXhglxmDYCfjAXkozKNYLo6yw==
-=K0LS
------END PGP MESSAGE-----
-'), 'foobar');
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes256.sha1.mdc.s2k0.z0
-
-jAQECQAC0kQB4L1eMbani07XF2ZYiXNK9LW3v8w41oUPl7dStmrJPQFwsdxmrDHu
-rQr3WbdKdY9ufjOE5+mXI+EFkSPrF9rL9NCq6w==
-=RGts
------END PGP MESSAGE-----
-'), 'foobar');
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes256.sha1.mdc.s2k1.z0
-
-jAwECQECKHhrou7ZOIXSRAHWIVP+xjVQcjAVBTt+qh9SNzYe248xFTwozkwev3mO
-+KVJW0qhk0An+Y2KF99/bYFl9cL5D3Tl43fC8fXGl3x3m7pR
-=SUrU
------END PGP MESSAGE-----
-'), 'foobar');
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes256.sha1.mdc.s2k3.z0
-
-jA0ECQMCjc8lwZu8Fz1g0kQBkEzjImi21liep5jj+3dAJ2aZFfUkohi8b3n9z+7+
-4+NRzL7cMW2RLAFnJbiqXDlRHMwleeuLN1up2WIxsxtYYuaBjA==
-=XZrG
------END PGP MESSAGE-----
-'), 'foobar');
-
--- Checking longer passwords
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.mdc.s2k3.z0
-
-jA0EBwMCx6dBiuqrYNRg0kQBEo63AvA1SCslxP7ayanLf1H0/hlk2nONVhTwVEWi
-tTGup1mMz6Cfh1uDRErUuXpx9A0gdMu7zX0o5XjrL7WGDAZdSw==
-=XKKG
------END PGP MESSAGE-----
-'), '0123456789abcdefghij');
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.mdc.s2k3.z0
-
-jA0EBwMCBDvYuS990iFg0kQBW31UK5OiCjWf5x6KJ8qNNT2HZWQCjCBZMU0XsOC6
-CMxFKadf144H/vpoV9GA0f22keQgCl0EsTE4V4lweVOPTKCMJg==
-=gWDh
------END PGP MESSAGE-----
-'), '0123456789abcdefghij2jk4h5g2j54khg23h54g2kh54g2khj54g23hj54');
-
-select pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.mdc.s2k3.z0
-
-jA0EBwMCqXbFafC+ofVg0kQBejyiPqH0QMERVGfmPOjtAxvyG5KDIJPYojTgVSDt
-FwsDabdQUz5O7bgNSnxfmyw1OifGF+W2bIn/8W+0rDf8u3+O+Q==
-=OxOF
------END PGP MESSAGE-----
-'), 'x');
-
--- Checking various data
-select encode(digest(pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat1.aes.sha1.mdc.s2k3.z0
-
-jA0EBwMCGJ+SpuOysINg0kQBJfSjzsW0x4OVcAyr17O7FBvMTwIGeGcJd99oTQU8
-Xtx3kDqnhUq9Z1fS3qPbi5iNP2A9NxOBxPWz2JzxhydANlgbxg==
-=W/ik
------END PGP MESSAGE-----
-'), '0123456789abcdefghij'), 'sha1'), 'hex');
--- expected: 0225e3ede6f2587b076d021a189ff60aad67e066
-
-select encode(digest(pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat2.aes.sha1.mdc.s2k3.z0
-
-jA0EBwMCvdpDvidNzMxg0jUBvj8eS2+1t/9/zgemxvhtc0fvdKGGbjH7dleaTJRB
-SaV9L04ky1qECNDx3XjnoKLC+H7IOQ==
-=Fxen
------END PGP MESSAGE-----
-'), '0123456789abcdefghij'), 'sha1'), 'hex');
--- expected: da39a3ee5e6b4b0d3255bfef95601890afd80709
-
-select encode(digest(pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: dat3.aes.sha1.mdc.s2k3.z0
-
-jA0EBwMCxQvxJZ3G/HRg0lgBeYmTa7/uDAjPyFwSX4CYBgpZWVn/JS8JzILrcWF8
-gFnkUKIE0PSaYFp+Yi1VlRfUtRQ/X/LYNGa7tWZS+4VQajz2Xtz4vUeAEiYFYPXk
-73Hb8m1yRhQK
-=ivrD
------END PGP MESSAGE-----
-'), '0123456789abcdefghij'), 'sha1'), 'hex');
--- expected: 5e5c135efc0dd00633efc6dfd6e731ea408a5b4c
-
--- Checking CRLF
-select encode(digest(pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: crlf mess
-
-ww0ECQMCt7VAtby6l4Bi0lgB5KMIZiiF/b3CfMfUyY0eDncsGXtkbu1X+l9brjpMP8eJnY79Amms
-a3nsOzKTXUfS9VyaXo8IrncM6n7fdaXpwba/3tNsAhJG4lDv1k4g9v8Ix2dfv6Rs
-=mBP9
------END PGP MESSAGE-----
-'), 'key', 'convert-crlf=0'), 'sha1'), 'hex');
--- expected: 9353062be7720f1446d30b9e75573a4833886784
-
-select encode(digest(pgp_sym_decrypt(dearmor('
------BEGIN PGP MESSAGE-----
-Comment: crlf mess
-
-ww0ECQMCt7VAtby6l4Bi0lgB5KMIZiiF/b3CfMfUyY0eDncsGXtkbu1X+l9brjpMP8eJnY79Amms
-a3nsOzKTXUfS9VyaXo8IrncM6n7fdaXpwba/3tNsAhJG4lDv1k4g9v8Ix2dfv6Rs
-=mBP9
------END PGP MESSAGE-----
-'), 'key', 'convert-crlf=1'), 'sha1'), 'hex');
--- expected: 7efefcab38467f7484d6fa43dc86cf5281bd78e2
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/pgp-encrypt-DISABLED.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/pgp-encrypt-DISABLED.sql b/contrib/pgcrypto/sql/pgp-encrypt-DISABLED.sql
deleted file mode 100644
index 80fb4d1..0000000
--- a/contrib/pgcrypto/sql/pgp-encrypt-DISABLED.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-
--- no random source
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/pgp-encrypt.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/pgp-encrypt.sql b/contrib/pgcrypto/sql/pgp-encrypt.sql
deleted file mode 100644
index b663e05..0000000
--- a/contrib/pgcrypto/sql/pgp-encrypt.sql
+++ /dev/null
@@ -1,96 +0,0 @@
---
--- PGP encrypt
---
-
-select pgp_sym_decrypt(pgp_sym_encrypt('Secret.', 'key'), 'key');
-
--- check whether the defaults are ok
-select pgp_sym_decrypt(pgp_sym_encrypt('Secret.', 'key'),
- 'key', 'expect-cipher-algo=aes128,
- expect-disable-mdc=0,
- expect-sess-key=0,
- expect-s2k-mode=3,
- expect-s2k-digest-algo=sha1,
- expect-compress-algo=0
- ');
-
--- maybe the expect- stuff simply does not work
-select pgp_sym_decrypt(pgp_sym_encrypt('Secret.', 'key'),
- 'key', 'expect-cipher-algo=bf,
- expect-disable-mdc=1,
- expect-sess-key=1,
- expect-s2k-mode=0,
- expect-s2k-digest-algo=md5,
- expect-compress-algo=1
- ');
-
--- bytea as text
-select pgp_sym_decrypt(pgp_sym_encrypt_bytea('Binary', 'baz'), 'baz');
-
--- text as bytea
-select pgp_sym_decrypt_bytea(pgp_sym_encrypt('Text', 'baz'), 'baz');
-
-
--- algorithm change
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 'cipher-algo=bf'),
- 'key', 'expect-cipher-algo=bf');
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 'cipher-algo=aes'),
- 'key', 'expect-cipher-algo=aes128');
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 'cipher-algo=aes192'),
- 'key', 'expect-cipher-algo=aes192');
-
--- s2k change
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 's2k-mode=0'),
- 'key', 'expect-s2k-mode=0');
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 's2k-mode=1'),
- 'key', 'expect-s2k-mode=1');
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 's2k-mode=3'),
- 'key', 'expect-s2k-mode=3');
-
--- s2k digest change
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 's2k-digest-algo=md5'),
- 'key', 'expect-s2k-digest-algo=md5');
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 's2k-digest-algo=sha1'),
- 'key', 'expect-s2k-digest-algo=sha1');
-
--- sess key
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 'sess-key=0'),
- 'key', 'expect-sess-key=0');
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 'sess-key=1'),
- 'key', 'expect-sess-key=1');
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 'sess-key=1, cipher-algo=bf'),
- 'key', 'expect-sess-key=1, expect-cipher-algo=bf');
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 'sess-key=1, cipher-algo=aes192'),
- 'key', 'expect-sess-key=1, expect-cipher-algo=aes192');
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 'sess-key=1, cipher-algo=aes256'),
- 'key', 'expect-sess-key=1, expect-cipher-algo=aes256');
-
--- no mdc
-select pgp_sym_decrypt(
- pgp_sym_encrypt('Secret.', 'key', 'disable-mdc=1'),
- 'key', 'expect-disable-mdc=1');
-
--- crlf
-select encode(pgp_sym_decrypt_bytea(
- pgp_sym_encrypt('1\n2\n3\r\n', 'key', 'convert-crlf=1'),
- 'key'), 'hex');
-
--- conversion should be lossless
-select encode(digest(pgp_sym_decrypt(
- pgp_sym_encrypt('\r\n0\n1\r\r\n\n2\r', 'key', 'convert-crlf=1'),
- 'key', 'convert-crlf=1'), 'sha1'), 'hex') as result,
- encode(digest('\r\n0\n1\r\r\n\n2\r', 'sha1'), 'hex') as expect;
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/pgp-info.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/pgp-info.sql b/contrib/pgcrypto/sql/pgp-info.sql
deleted file mode 100644
index c525ce3..0000000
--- a/contrib/pgcrypto/sql/pgp-info.sql
+++ /dev/null
@@ -1,23 +0,0 @@
---
--- PGP info functions
---
-
--- pgp_key_id
-
-select pgp_key_id(dearmor(pubkey)) from keytbl where id=1;
-select pgp_key_id(dearmor(pubkey)) from keytbl where id=2;
-select pgp_key_id(dearmor(pubkey)) from keytbl where id=3;
-select pgp_key_id(dearmor(pubkey)) from keytbl where id=4; -- should fail
-select pgp_key_id(dearmor(pubkey)) from keytbl where id=5;
-select pgp_key_id(dearmor(pubkey)) from keytbl where id=6;
-
-select pgp_key_id(dearmor(seckey)) from keytbl where id=1;
-select pgp_key_id(dearmor(seckey)) from keytbl where id=2;
-select pgp_key_id(dearmor(seckey)) from keytbl where id=3;
-select pgp_key_id(dearmor(seckey)) from keytbl where id=4; -- should fail
-select pgp_key_id(dearmor(seckey)) from keytbl where id=5;
-select pgp_key_id(dearmor(seckey)) from keytbl where id=6;
-
-select pgp_key_id(dearmor(data)) as data_key_id
-from encdata order by id;
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sql/pgp-pubkey-DISABLED.sql
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sql/pgp-pubkey-DISABLED.sql b/contrib/pgcrypto/sql/pgp-pubkey-DISABLED.sql
deleted file mode 100644
index b4aec5d..0000000
--- a/contrib/pgcrypto/sql/pgp-pubkey-DISABLED.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-
--- no bignum support
-
[05/11] incubator-hawq git commit: HAWQ-394. Remove pgcrypto from
code base
Posted by hu...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/pgp-pgsql.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/pgp-pgsql.c b/contrib/pgcrypto/pgp-pgsql.c
deleted file mode 100644
index 530a3d3..0000000
--- a/contrib/pgcrypto/pgp-pgsql.c
+++ /dev/null
@@ -1,921 +0,0 @@
-/*
- * pgp-pgsql.c
- * PostgreSQL wrappers for pgp.
- *
- * Copyright (c) 2005 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/pgp-pgsql.c,v 1.11 2009/06/11 14:48:52 momjian Exp $
- */
-
-#include "postgres.h"
-
-#include "fmgr.h"
-#include "parser/scansup.h"
-#include "mb/pg_wchar.h"
-#include "utils/builtins.h"
-
-#include "mbuf.h"
-#include "px.h"
-#include "pgp.h"
-
-/*
- * public functions
- */
-Datum pgp_sym_encrypt_text(PG_FUNCTION_ARGS);
-Datum pgp_sym_encrypt_bytea(PG_FUNCTION_ARGS);
-Datum pgp_sym_decrypt_text(PG_FUNCTION_ARGS);
-Datum pgp_sym_decrypt_bytea(PG_FUNCTION_ARGS);
-
-Datum pgp_pub_encrypt_text(PG_FUNCTION_ARGS);
-Datum pgp_pub_encrypt_bytea(PG_FUNCTION_ARGS);
-Datum pgp_pub_decrypt_text(PG_FUNCTION_ARGS);
-Datum pgp_pub_decrypt_bytea(PG_FUNCTION_ARGS);
-
-Datum pgp_key_id_w(PG_FUNCTION_ARGS);
-
-Datum pg_armor(PG_FUNCTION_ARGS);
-Datum pg_dearmor(PG_FUNCTION_ARGS);
-
-/* function headers */
-
-PG_FUNCTION_INFO_V1(pgp_sym_encrypt_bytea);
-PG_FUNCTION_INFO_V1(pgp_sym_encrypt_text);
-PG_FUNCTION_INFO_V1(pgp_sym_decrypt_bytea);
-PG_FUNCTION_INFO_V1(pgp_sym_decrypt_text);
-
-PG_FUNCTION_INFO_V1(pgp_pub_encrypt_bytea);
-PG_FUNCTION_INFO_V1(pgp_pub_encrypt_text);
-PG_FUNCTION_INFO_V1(pgp_pub_decrypt_bytea);
-PG_FUNCTION_INFO_V1(pgp_pub_decrypt_text);
-
-PG_FUNCTION_INFO_V1(pgp_key_id_w);
-
-PG_FUNCTION_INFO_V1(pg_armor);
-PG_FUNCTION_INFO_V1(pg_dearmor);
-
-/*
- * Mix a block of data into RNG.
- */
-static void
-add_block_entropy(PX_MD *md, text *data)
-{
- uint8 sha1[20];
-
- px_md_reset(md);
- px_md_update(md, (uint8 *) VARDATA(data), VARSIZE(data) - VARHDRSZ);
- px_md_finish(md, sha1);
-
- px_add_entropy(sha1, 20);
-
- memset(sha1, 0, 20);
-}
-
-/*
- * Mix user data into RNG. It is for user own interests to have
- * RNG state shuffled.
- */
-static void
-add_entropy(text *data1, text *data2, text *data3)
-{
- PX_MD *md;
- uint8 rnd[3];
-
- if (!data1 && !data2 && !data3)
- return;
-
- if (px_get_random_bytes(rnd, 3) < 0)
- return;
-
- if (px_find_digest("sha1", &md) < 0)
- return;
-
- /*
- * Try to make the feeding unpredictable.
- *
- * Prefer data over keys, as it's rather likely that key is same in
- * several calls.
- */
-
- /* chance: 7/8 */
- if (data1 && rnd[0] >= 32)
- add_block_entropy(md, data1);
-
- /* chance: 5/8 */
- if (data2 && rnd[1] >= 160)
- add_block_entropy(md, data2);
-
- /* chance: 5/8 */
- if (data3 && rnd[2] >= 160)
- add_block_entropy(md, data3);
-
- px_md_free(md);
- memset(rnd, 0, sizeof(rnd));
-}
-
-/*
- * returns src in case of no conversion or error
- */
-static text *
-convert_charset(text *src, int cset_from, int cset_to)
-{
- int src_len = VARSIZE(src) - VARHDRSZ;
- unsigned char *dst;
- unsigned char *csrc = (unsigned char *) VARDATA(src);
- text *res;
-
- dst = pg_do_encoding_conversion(csrc, src_len, cset_from, cset_to);
- if (dst == csrc)
- return src;
-
- res = cstring_to_text((char *) dst);
- pfree(dst);
- return res;
-}
-
-static text *
-convert_from_utf8(text *src)
-{
- return convert_charset(src, PG_UTF8, GetDatabaseEncoding());
-}
-
-static text *
-convert_to_utf8(text *src)
-{
- return convert_charset(src, GetDatabaseEncoding(), PG_UTF8);
-}
-
-static void
-clear_and_pfree(text *p)
-{
- memset(p, 0, VARSIZE(p));
- pfree(p);
-}
-
-/*
- * expect-* arguments storage
- */
-struct debug_expect
-{
- int debug;
- int expect;
- int cipher_algo;
- int s2k_mode;
- int s2k_cipher_algo;
- int s2k_digest_algo;
- int compress_algo;
- int use_sess_key;
- int disable_mdc;
- int unicode_mode;
-};
-
-static void
-fill_expect(struct debug_expect * ex, int text_mode)
-{
- ex->debug = 0;
- ex->expect = 0;
- ex->cipher_algo = -1;
- ex->s2k_mode = -1;
- ex->s2k_cipher_algo = -1;
- ex->s2k_digest_algo = -1;
- ex->compress_algo = -1;
- ex->use_sess_key = -1;
- ex->disable_mdc = -1;
- ex->unicode_mode = -1;
-}
-
-#define EX_MSG(arg) \
- ereport(NOTICE, (errmsg( \
- "pgp_decrypt: unexpected %s: expected %d got %d", \
- CppAsString(arg), ex->arg, ctx->arg)))
-
-#define EX_CHECK(arg) do { \
- if (ex->arg >= 0 && ex->arg != ctx->arg) EX_MSG(arg); \
- } while (0)
-
-static void
-check_expect(PGP_Context *ctx, struct debug_expect * ex)
-{
- EX_CHECK(cipher_algo);
- EX_CHECK(s2k_mode);
- EX_CHECK(s2k_digest_algo);
- EX_CHECK(use_sess_key);
- if (ctx->use_sess_key)
- EX_CHECK(s2k_cipher_algo);
- EX_CHECK(disable_mdc);
- EX_CHECK(compress_algo);
- EX_CHECK(unicode_mode);
-}
-
-static void
-show_debug(const char *msg)
-{
- ereport(NOTICE, (errmsg("dbg: %s", msg)));
-}
-
-static int
-set_arg(PGP_Context *ctx, char *key, char *val,
- struct debug_expect * ex)
-{
- int res = 0;
-
- if (strcmp(key, "cipher-algo") == 0)
- res = pgp_set_cipher_algo(ctx, val);
- else if (strcmp(key, "disable-mdc") == 0)
- res = pgp_disable_mdc(ctx, atoi(val));
- else if (strcmp(key, "sess-key") == 0)
- res = pgp_set_sess_key(ctx, atoi(val));
- else if (strcmp(key, "s2k-mode") == 0)
- res = pgp_set_s2k_mode(ctx, atoi(val));
- else if (strcmp(key, "s2k-digest-algo") == 0)
- res = pgp_set_s2k_digest_algo(ctx, val);
- else if (strcmp(key, "s2k-cipher-algo") == 0)
- res = pgp_set_s2k_cipher_algo(ctx, val);
- else if (strcmp(key, "compress-algo") == 0)
- res = pgp_set_compress_algo(ctx, atoi(val));
- else if (strcmp(key, "compress-level") == 0)
- res = pgp_set_compress_level(ctx, atoi(val));
- else if (strcmp(key, "convert-crlf") == 0)
- res = pgp_set_convert_crlf(ctx, atoi(val));
- else if (strcmp(key, "unicode-mode") == 0)
- res = pgp_set_unicode_mode(ctx, atoi(val));
- /* decrypt debug */
- else if (ex != NULL && strcmp(key, "debug") == 0)
- ex->debug = atoi(val);
- else if (ex != NULL && strcmp(key, "expect-cipher-algo") == 0)
- {
- ex->expect = 1;
- ex->cipher_algo = pgp_get_cipher_code(val);
- }
- else if (ex != NULL && strcmp(key, "expect-disable-mdc") == 0)
- {
- ex->expect = 1;
- ex->disable_mdc = atoi(val);
- }
- else if (ex != NULL && strcmp(key, "expect-sess-key") == 0)
- {
- ex->expect = 1;
- ex->use_sess_key = atoi(val);
- }
- else if (ex != NULL && strcmp(key, "expect-s2k-mode") == 0)
- {
- ex->expect = 1;
- ex->s2k_mode = atoi(val);
- }
- else if (ex != NULL && strcmp(key, "expect-s2k-digest-algo") == 0)
- {
- ex->expect = 1;
- ex->s2k_digest_algo = pgp_get_digest_code(val);
- }
- else if (ex != NULL && strcmp(key, "expect-s2k-cipher-algo") == 0)
- {
- ex->expect = 1;
- ex->s2k_cipher_algo = pgp_get_cipher_code(val);
- }
- else if (ex != NULL && strcmp(key, "expect-compress-algo") == 0)
- {
- ex->expect = 1;
- ex->compress_algo = atoi(val);
- }
- else if (ex != NULL && strcmp(key, "expect-unicode-mode") == 0)
- {
- ex->expect = 1;
- ex->unicode_mode = atoi(val);
- }
- else
- res = PXE_ARGUMENT_ERROR;
-
- return res;
-}
-
-/*
- * Find next word. Handle ',' and '=' as words. Skip whitespace.
- * Put word info into res_p, res_len.
- * Returns ptr to next word.
- */
-static char *
-getword(char *p, char **res_p, int *res_len)
-{
- /* whitespace at start */
- while (*p && (*p == ' ' || *p == '\t' || *p == '\n'))
- p++;
-
- /* word data */
- *res_p = p;
- if (*p == '=' || *p == ',')
- p++;
- else
- while (*p && !(*p == ' ' || *p == '\t' || *p == '\n'
- || *p == '=' || *p == ','))
- p++;
-
- /* word end */
- *res_len = p - *res_p;
-
- /* whitespace at end */
- while (*p && (*p == ' ' || *p == '\t' || *p == '\n'))
- p++;
-
- return p;
-}
-
-/*
- * Convert to lowercase asciiz string.
- */
-static char *
-downcase_convert(const uint8 *s, int len)
-{
- int c,
- i;
- char *res = palloc(len + 1);
-
- for (i = 0; i < len; i++)
- {
- c = s[i];
- if (c >= 'A' && c <= 'Z')
- c += 'a' - 'A';
- res[i] = c;
- }
- res[len] = 0;
- return res;
-}
-
-static int
-parse_args(PGP_Context *ctx, uint8 *args, int arg_len,
- struct debug_expect * ex)
-{
- char *str = downcase_convert(args, arg_len);
- char *key,
- *val;
- int key_len,
- val_len;
- int res = 0;
- char *p = str;
-
- while (*p)
- {
- res = PXE_ARGUMENT_ERROR;
- p = getword(p, &key, &key_len);
- if (*p++ != '=')
- break;
- p = getword(p, &val, &val_len);
- if (*p == '\0')
- ;
- else if (*p++ != ',')
- break;
-
- if (*key == 0 || *val == 0 || val_len == 0)
- break;
-
- key[key_len] = 0;
- val[val_len] = 0;
-
- res = set_arg(ctx, key, val, ex);
- if (res < 0)
- break;
- }
- pfree(str);
- return res;
-}
-
-static MBuf *
-create_mbuf_from_vardata(text *data)
-{
- return mbuf_create_from_data((uint8 *) VARDATA(data),
- VARSIZE(data) - VARHDRSZ);
-}
-
-static void
-init_work(PGP_Context **ctx_p, int is_text,
- text *args, struct debug_expect * ex)
-{
- int err = pgp_init(ctx_p);
-
- fill_expect(ex, is_text);
-
- if (err == 0 && args != NULL)
- err = parse_args(*ctx_p, (uint8 *) VARDATA(args),
- VARSIZE(args) - VARHDRSZ, ex);
-
- if (err)
- {
- ereport(ERROR,
- (errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
- errmsg("%s", px_strerror(err))));
- }
-
- if (ex->debug)
- px_set_debug_handler(show_debug);
-
- pgp_set_text_mode(*ctx_p, is_text);
-}
-
-static bytea *
-encrypt_internal(int is_pubenc, int is_text,
- text *data, text *key, text *args)
-{
- MBuf *src,
- *dst;
- uint8 tmp[VARHDRSZ];
- uint8 *restmp;
- bytea *res;
- int res_len;
- PGP_Context *ctx;
- int err;
- struct debug_expect ex;
- text *tmp_data = NULL;
-
- /*
- * Add data and key info RNG.
- */
- add_entropy(data, key, NULL);
-
- init_work(&ctx, is_text, args, &ex);
-
- if (is_text && pgp_get_unicode_mode(ctx))
- {
- tmp_data = convert_to_utf8(data);
- if (tmp_data == data)
- tmp_data = NULL;
- else
- data = tmp_data;
- }
-
- src = create_mbuf_from_vardata(data);
- dst = mbuf_create(VARSIZE(data) + 128);
-
- /*
- * reserve room for header
- */
- mbuf_append(dst, tmp, VARHDRSZ);
-
- /*
- * set key
- */
- if (is_pubenc)
- {
- MBuf *kbuf = create_mbuf_from_vardata(key);
-
- err = pgp_set_pubkey(ctx, kbuf,
- NULL, 0, 0);
- mbuf_free(kbuf);
- }
- else
- err = pgp_set_symkey(ctx, (uint8 *) VARDATA(key),
- VARSIZE(key) - VARHDRSZ);
-
- /*
- * encrypt
- */
- if (err >= 0)
- err = pgp_encrypt(ctx, src, dst);
-
- /*
- * check for error
- */
- if (err)
- {
- if (ex.debug)
- px_set_debug_handler(NULL);
- if (tmp_data)
- clear_and_pfree(tmp_data);
- pgp_free(ctx);
- mbuf_free(src);
- mbuf_free(dst);
- ereport(ERROR,
- (errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
- errmsg("%s", px_strerror(err))));
- }
-
- /* res_len includes VARHDRSZ */
- res_len = mbuf_steal_data(dst, &restmp);
- res = (bytea *) restmp;
- SET_VARSIZE(res, res_len);
-
- if (tmp_data)
- clear_and_pfree(tmp_data);
- pgp_free(ctx);
- mbuf_free(src);
- mbuf_free(dst);
-
- px_set_debug_handler(NULL);
-
- return res;
-}
-
-static bytea *
-decrypt_internal(int is_pubenc, int need_text, text *data,
- text *key, text *keypsw, text *args)
-{
- int err;
- MBuf *src = NULL,
- *dst = NULL;
- uint8 tmp[VARHDRSZ];
- uint8 *restmp;
- bytea *res;
- int res_len;
- PGP_Context *ctx = NULL;
- struct debug_expect ex;
- int got_unicode = 0;
-
-
- init_work(&ctx, need_text, args, &ex);
-
- src = mbuf_create_from_data((uint8 *) VARDATA(data),
- VARSIZE(data) - VARHDRSZ);
- dst = mbuf_create(VARSIZE(data) + 2048);
-
- /*
- * reserve room for header
- */
- mbuf_append(dst, tmp, VARHDRSZ);
-
- /*
- * set key
- */
- if (is_pubenc)
- {
- uint8 *psw = NULL;
- int psw_len = 0;
- MBuf *kbuf;
-
- if (keypsw)
- {
- psw = (uint8 *) VARDATA(keypsw);
- psw_len = VARSIZE(keypsw) - VARHDRSZ;
- }
- kbuf = create_mbuf_from_vardata(key);
- err = pgp_set_pubkey(ctx, kbuf, psw, psw_len, 1);
- mbuf_free(kbuf);
- }
- else
- err = pgp_set_symkey(ctx, (uint8 *) VARDATA(key),
- VARSIZE(key) - VARHDRSZ);
-
- /*
- * decrypt
- */
- if (err >= 0)
- err = pgp_decrypt(ctx, src, dst);
-
- /*
- * failed?
- */
- if (err < 0)
- goto out;
-
- if (ex.expect)
- check_expect(ctx, &ex);
-
- /* remember the setting */
- got_unicode = pgp_get_unicode_mode(ctx);
-
-out:
- if (src)
- mbuf_free(src);
- if (ctx)
- pgp_free(ctx);
-
- if (err)
- {
- px_set_debug_handler(NULL);
- if (dst)
- mbuf_free(dst);
- ereport(ERROR,
- (errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
- errmsg("%s", px_strerror(err))));
- }
-
- res_len = mbuf_steal_data(dst, &restmp);
- mbuf_free(dst);
-
- /* res_len includes VARHDRSZ */
- res = (bytea *) restmp;
- SET_VARSIZE(res, res_len);
-
- if (need_text && got_unicode)
- {
- text *utf = convert_from_utf8(res);
-
- if (utf != res)
- {
- clear_and_pfree(res);
- res = utf;
- }
- }
- px_set_debug_handler(NULL);
-
- /*
- * add successfull decryptions also into RNG
- */
- add_entropy(res, key, keypsw);
-
- return res;
-}
-
-/*
- * Wrappers for symmetric-key functions
- */
-Datum
-pgp_sym_encrypt_bytea(PG_FUNCTION_ARGS)
-{
- bytea *data,
- *key;
- text *arg = NULL;
- text *res;
-
- data = PG_GETARG_BYTEA_P(0);
- key = PG_GETARG_BYTEA_P(1);
- if (PG_NARGS() > 2)
- arg = PG_GETARG_BYTEA_P(2);
-
- res = encrypt_internal(0, 0, data, key, arg);
-
- PG_FREE_IF_COPY(data, 0);
- PG_FREE_IF_COPY(key, 1);
- if (PG_NARGS() > 2)
- PG_FREE_IF_COPY(arg, 2);
- PG_RETURN_TEXT_P(res);
-}
-
-Datum
-pgp_sym_encrypt_text(PG_FUNCTION_ARGS)
-{
- bytea *data,
- *key;
- text *arg = NULL;
- text *res;
-
- data = PG_GETARG_BYTEA_P(0);
- key = PG_GETARG_BYTEA_P(1);
- if (PG_NARGS() > 2)
- arg = PG_GETARG_BYTEA_P(2);
-
- res = encrypt_internal(0, 1, data, key, arg);
-
- PG_FREE_IF_COPY(data, 0);
- PG_FREE_IF_COPY(key, 1);
- if (PG_NARGS() > 2)
- PG_FREE_IF_COPY(arg, 2);
- PG_RETURN_TEXT_P(res);
-}
-
-
-Datum
-pgp_sym_decrypt_bytea(PG_FUNCTION_ARGS)
-{
- bytea *data,
- *key;
- text *arg = NULL;
- text *res;
-
- data = PG_GETARG_BYTEA_P(0);
- key = PG_GETARG_BYTEA_P(1);
- if (PG_NARGS() > 2)
- arg = PG_GETARG_BYTEA_P(2);
-
- res = decrypt_internal(0, 0, data, key, NULL, arg);
-
- PG_FREE_IF_COPY(data, 0);
- PG_FREE_IF_COPY(key, 1);
- if (PG_NARGS() > 2)
- PG_FREE_IF_COPY(arg, 2);
- PG_RETURN_TEXT_P(res);
-}
-
-Datum
-pgp_sym_decrypt_text(PG_FUNCTION_ARGS)
-{
- bytea *data,
- *key;
- text *arg = NULL;
- text *res;
-
- data = PG_GETARG_BYTEA_P(0);
- key = PG_GETARG_BYTEA_P(1);
- if (PG_NARGS() > 2)
- arg = PG_GETARG_BYTEA_P(2);
-
- res = decrypt_internal(0, 1, data, key, NULL, arg);
-
- PG_FREE_IF_COPY(data, 0);
- PG_FREE_IF_COPY(key, 1);
- if (PG_NARGS() > 2)
- PG_FREE_IF_COPY(arg, 2);
- PG_RETURN_TEXT_P(res);
-}
-
-/*
- * Wrappers for public-key functions
- */
-
-Datum
-pgp_pub_encrypt_bytea(PG_FUNCTION_ARGS)
-{
- bytea *data,
- *key;
- text *arg = NULL;
- text *res;
-
- data = PG_GETARG_BYTEA_P(0);
- key = PG_GETARG_BYTEA_P(1);
- if (PG_NARGS() > 2)
- arg = PG_GETARG_BYTEA_P(2);
-
- res = encrypt_internal(1, 0, data, key, arg);
-
- PG_FREE_IF_COPY(data, 0);
- PG_FREE_IF_COPY(key, 1);
- if (PG_NARGS() > 2)
- PG_FREE_IF_COPY(arg, 2);
- PG_RETURN_TEXT_P(res);
-}
-
-Datum
-pgp_pub_encrypt_text(PG_FUNCTION_ARGS)
-{
- bytea *data,
- *key;
- text *arg = NULL;
- text *res;
-
- data = PG_GETARG_BYTEA_P(0);
- key = PG_GETARG_BYTEA_P(1);
- if (PG_NARGS() > 2)
- arg = PG_GETARG_BYTEA_P(2);
-
- res = encrypt_internal(1, 1, data, key, arg);
-
- PG_FREE_IF_COPY(data, 0);
- PG_FREE_IF_COPY(key, 1);
- if (PG_NARGS() > 2)
- PG_FREE_IF_COPY(arg, 2);
- PG_RETURN_TEXT_P(res);
-}
-
-
-Datum
-pgp_pub_decrypt_bytea(PG_FUNCTION_ARGS)
-{
- bytea *data,
- *key;
- text *psw = NULL,
- *arg = NULL;
- text *res;
-
- data = PG_GETARG_BYTEA_P(0);
- key = PG_GETARG_BYTEA_P(1);
- if (PG_NARGS() > 2)
- psw = PG_GETARG_BYTEA_P(2);
- if (PG_NARGS() > 3)
- arg = PG_GETARG_BYTEA_P(3);
-
- res = decrypt_internal(1, 0, data, key, psw, arg);
-
- PG_FREE_IF_COPY(data, 0);
- PG_FREE_IF_COPY(key, 1);
- if (PG_NARGS() > 2)
- PG_FREE_IF_COPY(psw, 2);
- if (PG_NARGS() > 3)
- PG_FREE_IF_COPY(arg, 3);
- PG_RETURN_TEXT_P(res);
-}
-
-Datum
-pgp_pub_decrypt_text(PG_FUNCTION_ARGS)
-{
- bytea *data,
- *key;
- text *psw = NULL,
- *arg = NULL;
- text *res;
-
- data = PG_GETARG_BYTEA_P(0);
- key = PG_GETARG_BYTEA_P(1);
- if (PG_NARGS() > 2)
- psw = PG_GETARG_BYTEA_P(2);
- if (PG_NARGS() > 3)
- arg = PG_GETARG_BYTEA_P(3);
-
- res = decrypt_internal(1, 1, data, key, psw, arg);
-
- PG_FREE_IF_COPY(data, 0);
- PG_FREE_IF_COPY(key, 1);
- if (PG_NARGS() > 2)
- PG_FREE_IF_COPY(psw, 2);
- if (PG_NARGS() > 3)
- PG_FREE_IF_COPY(arg, 3);
- PG_RETURN_TEXT_P(res);
-}
-
-
-/*
- * Wrappers for PGP ascii armor
- */
-
-Datum
-pg_armor(PG_FUNCTION_ARGS)
-{
- bytea *data;
- text *res;
- int data_len,
- res_len,
- guess_len;
-
- data = PG_GETARG_BYTEA_P(0);
- data_len = VARSIZE(data) - VARHDRSZ;
-
- guess_len = pgp_armor_enc_len(data_len);
- res = palloc(VARHDRSZ + guess_len);
-
- res_len = pgp_armor_encode((uint8 *) VARDATA(data), data_len,
- (uint8 *) VARDATA(res));
- if (res_len > guess_len)
- ereport(ERROR,
- (errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
- errmsg("Overflow - encode estimate too small")));
- SET_VARSIZE(res, VARHDRSZ + res_len);
-
- PG_FREE_IF_COPY(data, 0);
- PG_RETURN_TEXT_P(res);
-}
-
-Datum
-pg_dearmor(PG_FUNCTION_ARGS)
-{
- text *data;
- bytea *res;
- int data_len,
- res_len,
- guess_len;
-
- data = PG_GETARG_TEXT_P(0);
- data_len = VARSIZE(data) - VARHDRSZ;
-
- guess_len = pgp_armor_dec_len(data_len);
- res = palloc(VARHDRSZ + guess_len);
-
- res_len = pgp_armor_decode((uint8 *) VARDATA(data), data_len,
- (uint8 *) VARDATA(res));
- if (res_len < 0)
- ereport(ERROR,
- (errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
- errmsg("%s", px_strerror(res_len))));
- if (res_len > guess_len)
- ereport(ERROR,
- (errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
- errmsg("Overflow - decode estimate too small")));
- SET_VARSIZE(res, VARHDRSZ + res_len);
-
- PG_FREE_IF_COPY(data, 0);
- PG_RETURN_TEXT_P(res);
-}
-
-/*
- * Wrappers for PGP key id
- */
-
-Datum
-pgp_key_id_w(PG_FUNCTION_ARGS)
-{
- bytea *data;
- text *res;
- int res_len;
- MBuf *buf;
-
- data = PG_GETARG_BYTEA_P(0);
- buf = create_mbuf_from_vardata(data);
- res = palloc(VARHDRSZ + 17);
-
- res_len = pgp_get_keyid(buf, VARDATA(res));
- mbuf_free(buf);
- if (res_len < 0)
- ereport(ERROR,
- (errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
- errmsg("%s", px_strerror(res_len))));
- SET_VARSIZE(res, VARHDRSZ + res_len);
-
- PG_FREE_IF_COPY(data, 0);
- PG_RETURN_TEXT_P(res);
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/pgp-pubdec.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/pgp-pubdec.c b/contrib/pgcrypto/pgp-pubdec.c
deleted file mode 100644
index cb32708..0000000
--- a/contrib/pgcrypto/pgp-pubdec.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * pgp-pubdec.c
- * Decrypt public-key encrypted session key.
- *
- * Copyright (c) 2005 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/pgp-pubdec.c,v 1.6 2009/06/11 14:48:52 momjian Exp $
- */
-#include "postgres.h"
-
-#include "px.h"
-#include "mbuf.h"
-#include "pgp.h"
-
-/*
- * padded msg = 02 || PS || 00 || M
- * PS - pad bytes
- * M - msg
- */
-static uint8 *
-check_eme_pkcs1_v15(uint8 *data, int len)
-{
- uint8 *data_end = data + len;
- uint8 *p = data;
- int rnd = 0;
-
- if (len < 1 + 8 + 1)
- return NULL;
-
- if (*p++ != 2)
- return NULL;
-
- while (p < data_end && *p)
- {
- p++;
- rnd++;
- }
-
- if (p == data_end)
- return NULL;
- if (*p != 0)
- return NULL;
- if (rnd < 8)
- return NULL;
- return p + 1;
-}
-
-/*
- * secret message: 1 byte algo, sesskey, 2 byte cksum
- * ignore algo in cksum
- */
-static int
-control_cksum(uint8 *msg, int msglen)
-{
- int i;
- unsigned my_cksum,
- got_cksum;
-
- if (msglen < 3)
- return PXE_PGP_WRONG_KEY;
-
- my_cksum = 0;
- for (i = 1; i < msglen - 2; i++)
- my_cksum += msg[i];
- my_cksum &= 0xFFFF;
- got_cksum = ((unsigned) (msg[msglen - 2]) << 8) + msg[msglen - 1];
- if (my_cksum != got_cksum)
- {
- px_debug("pubenc cksum failed");
- return PXE_PGP_WRONG_KEY;
- }
- return 0;
-}
-
-static int
-decrypt_elgamal(PGP_PubKey *pk, PullFilter *pkt, PGP_MPI **m_p)
-{
- int res;
- PGP_MPI *c1 = NULL;
- PGP_MPI *c2 = NULL;
-
- if (pk->algo != PGP_PUB_ELG_ENCRYPT)
- return PXE_PGP_WRONG_KEY;
-
- /* read elgamal encrypted data */
- res = pgp_mpi_read(pkt, &c1);
- if (res < 0)
- goto out;
- res = pgp_mpi_read(pkt, &c2);
- if (res < 0)
- goto out;
-
- /* decrypt */
- res = pgp_elgamal_decrypt(pk, c1, c2, m_p);
-
-out:
- pgp_mpi_free(c1);
- pgp_mpi_free(c2);
- return res;
-}
-
-static int
-decrypt_rsa(PGP_PubKey *pk, PullFilter *pkt, PGP_MPI **m_p)
-{
- int res;
- PGP_MPI *c;
-
- if (pk->algo != PGP_PUB_RSA_ENCRYPT
- && pk->algo != PGP_PUB_RSA_ENCRYPT_SIGN)
- return PXE_PGP_WRONG_KEY;
-
- /* read rsa encrypted data */
- res = pgp_mpi_read(pkt, &c);
- if (res < 0)
- return res;
-
- /* decrypt */
- res = pgp_rsa_decrypt(pk, c, m_p);
-
- pgp_mpi_free(c);
- return res;
-}
-
-/* key id is missing - user is expected to try all keys */
-static const uint8
- any_key[] = {0, 0, 0, 0, 0, 0, 0, 0};
-
-int
-pgp_parse_pubenc_sesskey(PGP_Context *ctx, PullFilter *pkt)
-{
- int ver;
- int algo;
- int res;
- uint8 key_id[8];
- PGP_PubKey *pk;
- uint8 *msg;
- int msglen;
- PGP_MPI *m;
-
- pk = ctx->pub_key;
- if (pk == NULL)
- {
- px_debug("no pubkey?");
- return PXE_BUG;
- }
-
- GETBYTE(pkt, ver);
- if (ver != 3)
- {
- px_debug("unknown pubenc_sesskey pkt ver=%d", ver);
- return PXE_PGP_CORRUPT_DATA;
- }
-
- /*
- * check if keyid's match - user-friendly msg
- */
- res = pullf_read_fixed(pkt, 8, key_id);
- if (res < 0)
- return res;
- if (memcmp(key_id, any_key, 8) != 0
- && memcmp(key_id, pk->key_id, 8) != 0)
- {
- px_debug("key_id's does not match");
- return PXE_PGP_WRONG_KEY;
- }
-
- /*
- * Decrypt
- */
- GETBYTE(pkt, algo);
- switch (algo)
- {
- case PGP_PUB_ELG_ENCRYPT:
- res = decrypt_elgamal(pk, pkt, &m);
- break;
- case PGP_PUB_RSA_ENCRYPT:
- case PGP_PUB_RSA_ENCRYPT_SIGN:
- res = decrypt_rsa(pk, pkt, &m);
- break;
- default:
- res = PXE_PGP_UNKNOWN_PUBALGO;
- }
- if (res < 0)
- return res;
-
- /*
- * extract message
- */
- msg = check_eme_pkcs1_v15(m->data, m->bytes);
- if (msg == NULL)
- {
- px_debug("check_eme_pkcs1_v15 failed");
- res = PXE_PGP_WRONG_KEY;
- goto out;
- }
- msglen = m->bytes - (msg - m->data);
-
- res = control_cksum(msg, msglen);
- if (res < 0)
- goto out;
-
- /*
- * got sesskey
- */
- ctx->cipher_algo = *msg;
- ctx->sess_key_len = msglen - 3;
- memcpy(ctx->sess_key, msg + 1, ctx->sess_key_len);
-
-out:
- pgp_mpi_free(m);
- if (res < 0)
- return res;
- return pgp_expect_packet_end(pkt);
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/pgp-pubenc.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/pgp-pubenc.c b/contrib/pgcrypto/pgp-pubenc.c
deleted file mode 100644
index 9b44fbf..0000000
--- a/contrib/pgcrypto/pgp-pubenc.c
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * pgp-pubenc.c
- * Encrypt session key with public key.
- *
- * Copyright (c) 2005 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/pgp-pubenc.c,v 1.5 2009/06/11 14:48:52 momjian Exp $
- */
-#include "postgres.h"
-
-#include "px.h"
-#include "mbuf.h"
-#include "pgp.h"
-
-/*
- * padded msg: 02 || non-zero pad bytes || 00 || msg
- */
-static int
-pad_eme_pkcs1_v15(uint8 *data, int data_len, int res_len, uint8 **res_p)
-{
- int res;
- uint8 *buf,
- *p;
- int pad_len = res_len - 2 - data_len;
-
- if (pad_len < 8)
- return PXE_BUG;
-
- buf = px_alloc(res_len);
- buf[0] = 0x02;
- res = px_get_random_bytes(buf + 1, pad_len);
- if (res < 0)
- {
- px_free(buf);
- return res;
- }
-
- /* pad must not contain zero bytes */
- p = buf + 1;
- while (p < buf + 1 + pad_len)
- {
- if (*p == 0)
- {
- res = px_get_random_bytes(p, 1);
- if (res < 0)
- break;
- }
- if (*p != 0)
- p++;
- }
-
- if (res < 0)
- {
- memset(buf, 0, res_len);
- px_free(buf);
- return res;
- }
-
- buf[pad_len + 1] = 0;
- memcpy(buf + pad_len + 2, data, data_len);
- *res_p = buf;
-
- return 0;
-}
-
-static int
-create_secmsg(PGP_Context *ctx, PGP_MPI **msg_p, int full_bytes)
-{
- uint8 *secmsg;
- int res,
- i;
- unsigned cksum = 0;
- int klen = ctx->sess_key_len;
- uint8 *padded = NULL;
- PGP_MPI *m = NULL;
-
- /* calc checksum */
- for (i = 0; i < klen; i++)
- cksum += ctx->sess_key[i];
-
- /*
- * create "secret message"
- */
- secmsg = px_alloc(klen + 3);
- secmsg[0] = ctx->cipher_algo;
- memcpy(secmsg + 1, ctx->sess_key, klen);
- secmsg[klen + 1] = (cksum >> 8) & 0xFF;
- secmsg[klen + 2] = cksum & 0xFF;
-
- /*
- * now create a large integer of it
- */
- res = pad_eme_pkcs1_v15(secmsg, klen + 3, full_bytes, &padded);
- if (res >= 0)
- {
- /* first byte will be 0x02 */
- int full_bits = full_bytes * 8 - 6;
-
- res = pgp_mpi_create(padded, full_bits, &m);
- }
-
- if (padded)
- {
- memset(padded, 0, full_bytes);
- px_free(padded);
- }
- memset(secmsg, 0, klen + 3);
- px_free(secmsg);
-
- if (res >= 0)
- *msg_p = m;
-
- return res;
-}
-
-static int
-encrypt_and_write_elgamal(PGP_Context *ctx, PGP_PubKey *pk, PushFilter *pkt)
-{
- int res;
- PGP_MPI *m = NULL,
- *c1 = NULL,
- *c2 = NULL;
-
- /* create padded msg */
- res = create_secmsg(ctx, &m, pk->pub.elg.p->bytes - 1);
- if (res < 0)
- goto err;
-
- /* encrypt it */
- res = pgp_elgamal_encrypt(pk, m, &c1, &c2);
- if (res < 0)
- goto err;
-
- /* write out */
- res = pgp_mpi_write(pkt, c1);
- if (res < 0)
- goto err;
- res = pgp_mpi_write(pkt, c2);
-
-err:
- pgp_mpi_free(m);
- pgp_mpi_free(c1);
- pgp_mpi_free(c2);
- return res;
-}
-
-static int
-encrypt_and_write_rsa(PGP_Context *ctx, PGP_PubKey *pk, PushFilter *pkt)
-{
- int res;
- PGP_MPI *m = NULL,
- *c = NULL;
-
- /* create padded msg */
- res = create_secmsg(ctx, &m, pk->pub.rsa.n->bytes - 1);
- if (res < 0)
- goto err;
-
- /* encrypt it */
- res = pgp_rsa_encrypt(pk, m, &c);
- if (res < 0)
- goto err;
-
- /* write out */
- res = pgp_mpi_write(pkt, c);
-
-err:
- pgp_mpi_free(m);
- pgp_mpi_free(c);
- return res;
-}
-
-int
-pgp_write_pubenc_sesskey(PGP_Context *ctx, PushFilter *dst)
-{
- int res;
- PGP_PubKey *pk = ctx->pub_key;
- uint8 ver = 3;
- PushFilter *pkt = NULL;
- uint8 algo;
-
- if (pk == NULL)
- {
- px_debug("no pubkey?\n");
- return PXE_BUG;
- }
-
- algo = pk->algo;
-
- /*
- * now write packet
- */
- res = pgp_create_pkt_writer(dst, PGP_PKT_PUBENCRYPTED_SESSKEY, &pkt);
- if (res < 0)
- goto err;
- res = pushf_write(pkt, &ver, 1);
- if (res < 0)
- goto err;
- res = pushf_write(pkt, pk->key_id, 8);
- if (res < 0)
- goto err;
- res = pushf_write(pkt, &algo, 1);
- if (res < 0)
- goto err;
-
- switch (algo)
- {
- case PGP_PUB_ELG_ENCRYPT:
- res = encrypt_and_write_elgamal(ctx, pk, pkt);
- break;
- case PGP_PUB_RSA_ENCRYPT:
- case PGP_PUB_RSA_ENCRYPT_SIGN:
- res = encrypt_and_write_rsa(ctx, pk, pkt);
- break;
- }
- if (res < 0)
- goto err;
-
- /*
- * done, signal packet end
- */
- res = pushf_flush(pkt);
-err:
- if (pkt)
- pushf_free(pkt);
-
- return res;
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/pgp-pubkey.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/pgp-pubkey.c b/contrib/pgcrypto/pgp-pubkey.c
deleted file mode 100644
index 62b6e1a..0000000
--- a/contrib/pgcrypto/pgp-pubkey.c
+++ /dev/null
@@ -1,584 +0,0 @@
-/*
- * pgp-pubkey.c
- * Read public or secret key.
- *
- * Copyright (c) 2005 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/pgp-pubkey.c,v 1.5 2009/06/11 14:48:52 momjian Exp $
- */
-#include "postgres.h"
-
-#include "px.h"
-#include "mbuf.h"
-#include "pgp.h"
-
-int
-pgp_key_alloc(PGP_PubKey **pk_p)
-{
- PGP_PubKey *pk;
-
- pk = px_alloc(sizeof(*pk));
- memset(pk, 0, sizeof(*pk));
- *pk_p = pk;
- return 0;
-}
-
-void
-pgp_key_free(PGP_PubKey *pk)
-{
- if (pk == NULL)
- return;
-
- switch (pk->algo)
- {
- case PGP_PUB_ELG_ENCRYPT:
- pgp_mpi_free(pk->pub.elg.p);
- pgp_mpi_free(pk->pub.elg.g);
- pgp_mpi_free(pk->pub.elg.y);
- pgp_mpi_free(pk->sec.elg.x);
- break;
- case PGP_PUB_RSA_SIGN:
- case PGP_PUB_RSA_ENCRYPT:
- case PGP_PUB_RSA_ENCRYPT_SIGN:
- pgp_mpi_free(pk->pub.rsa.n);
- pgp_mpi_free(pk->pub.rsa.e);
- pgp_mpi_free(pk->sec.rsa.d);
- pgp_mpi_free(pk->sec.rsa.p);
- pgp_mpi_free(pk->sec.rsa.q);
- pgp_mpi_free(pk->sec.rsa.u);
- break;
- case PGP_PUB_DSA_SIGN:
- pgp_mpi_free(pk->pub.dsa.p);
- pgp_mpi_free(pk->pub.dsa.q);
- pgp_mpi_free(pk->pub.dsa.g);
- pgp_mpi_free(pk->pub.dsa.y);
- pgp_mpi_free(pk->sec.dsa.x);
- break;
- }
- memset(pk, 0, sizeof(*pk));
- px_free(pk);
-}
-
-static int
-calc_key_id(PGP_PubKey *pk)
-{
- int res;
- PX_MD *md;
- int len;
- uint8 hdr[3];
- uint8 hash[20];
-
- res = pgp_load_digest(PGP_DIGEST_SHA1, &md);
- if (res < 0)
- return res;
-
- len = 1 + 4 + 1;
- switch (pk->algo)
- {
- case PGP_PUB_ELG_ENCRYPT:
- len += 2 + pk->pub.elg.p->bytes;
- len += 2 + pk->pub.elg.g->bytes;
- len += 2 + pk->pub.elg.y->bytes;
- break;
- case PGP_PUB_RSA_SIGN:
- case PGP_PUB_RSA_ENCRYPT:
- case PGP_PUB_RSA_ENCRYPT_SIGN:
- len += 2 + pk->pub.rsa.n->bytes;
- len += 2 + pk->pub.rsa.e->bytes;
- break;
- case PGP_PUB_DSA_SIGN:
- len += 2 + pk->pub.dsa.p->bytes;
- len += 2 + pk->pub.dsa.q->bytes;
- len += 2 + pk->pub.dsa.g->bytes;
- len += 2 + pk->pub.dsa.y->bytes;
- break;
- }
-
- hdr[0] = 0x99;
- hdr[1] = len >> 8;
- hdr[2] = len & 0xFF;
- px_md_update(md, hdr, 3);
-
- px_md_update(md, &pk->ver, 1);
- px_md_update(md, pk->time, 4);
- px_md_update(md, &pk->algo, 1);
-
- switch (pk->algo)
- {
- case PGP_PUB_ELG_ENCRYPT:
- pgp_mpi_hash(md, pk->pub.elg.p);
- pgp_mpi_hash(md, pk->pub.elg.g);
- pgp_mpi_hash(md, pk->pub.elg.y);
- break;
- case PGP_PUB_RSA_SIGN:
- case PGP_PUB_RSA_ENCRYPT:
- case PGP_PUB_RSA_ENCRYPT_SIGN:
- pgp_mpi_hash(md, pk->pub.rsa.n);
- pgp_mpi_hash(md, pk->pub.rsa.e);
- break;
- case PGP_PUB_DSA_SIGN:
- pgp_mpi_hash(md, pk->pub.dsa.p);
- pgp_mpi_hash(md, pk->pub.dsa.q);
- pgp_mpi_hash(md, pk->pub.dsa.g);
- pgp_mpi_hash(md, pk->pub.dsa.y);
- break;
- }
-
- px_md_finish(md, hash);
- px_md_free(md);
-
- memcpy(pk->key_id, hash + 12, 8);
- memset(hash, 0, 20);
-
- return 0;
-}
-
-int
-_pgp_read_public_key(PullFilter *pkt, PGP_PubKey **pk_p)
-{
- int res;
- PGP_PubKey *pk;
-
- res = pgp_key_alloc(&pk);
- if (res < 0)
- return res;
-
- /* get version */
- GETBYTE(pkt, pk->ver);
- if (pk->ver != 4)
- {
- res = PXE_PGP_NOT_V4_KEYPKT;
- goto out;
- }
-
- /* read time */
- res = pullf_read_fixed(pkt, 4, pk->time);
- if (res < 0)
- goto out;
-
- /* pubkey algorithm */
- GETBYTE(pkt, pk->algo);
-
- switch (pk->algo)
- {
- case PGP_PUB_DSA_SIGN:
- res = pgp_mpi_read(pkt, &pk->pub.dsa.p);
- if (res < 0)
- break;
- res = pgp_mpi_read(pkt, &pk->pub.dsa.q);
- if (res < 0)
- break;
- res = pgp_mpi_read(pkt, &pk->pub.dsa.g);
- if (res < 0)
- break;
- res = pgp_mpi_read(pkt, &pk->pub.dsa.y);
- if (res < 0)
- break;
-
- res = calc_key_id(pk);
- break;
-
- case PGP_PUB_RSA_SIGN:
- case PGP_PUB_RSA_ENCRYPT:
- case PGP_PUB_RSA_ENCRYPT_SIGN:
- res = pgp_mpi_read(pkt, &pk->pub.rsa.n);
- if (res < 0)
- break;
- res = pgp_mpi_read(pkt, &pk->pub.rsa.e);
- if (res < 0)
- break;
-
- res = calc_key_id(pk);
-
- if (pk->algo != PGP_PUB_RSA_SIGN)
- pk->can_encrypt = 1;
- break;
-
- case PGP_PUB_ELG_ENCRYPT:
- res = pgp_mpi_read(pkt, &pk->pub.elg.p);
- if (res < 0)
- break;
- res = pgp_mpi_read(pkt, &pk->pub.elg.g);
- if (res < 0)
- break;
- res = pgp_mpi_read(pkt, &pk->pub.elg.y);
- if (res < 0)
- break;
-
- res = calc_key_id(pk);
-
- pk->can_encrypt = 1;
- break;
-
- default:
- px_debug("unknown public algo: %d", pk->algo);
- res = PXE_PGP_UNKNOWN_PUBALGO;
- }
-
-out:
- if (res < 0)
- pgp_key_free(pk);
- else
- *pk_p = pk;
-
- return res;
-}
-
-#define HIDE_CLEAR 0
-#define HIDE_CKSUM 255
-#define HIDE_SHA1 254
-
-static int
-check_key_sha1(PullFilter *src, PGP_PubKey *pk)
-{
- int res;
- uint8 got_sha1[20];
- uint8 my_sha1[20];
- PX_MD *md;
-
- res = pullf_read_fixed(src, 20, got_sha1);
- if (res < 0)
- return res;
-
- res = pgp_load_digest(PGP_DIGEST_SHA1, &md);
- if (res < 0)
- goto err;
- switch (pk->algo)
- {
- case PGP_PUB_ELG_ENCRYPT:
- pgp_mpi_hash(md, pk->sec.elg.x);
- break;
- case PGP_PUB_RSA_SIGN:
- case PGP_PUB_RSA_ENCRYPT:
- case PGP_PUB_RSA_ENCRYPT_SIGN:
- pgp_mpi_hash(md, pk->sec.rsa.d);
- pgp_mpi_hash(md, pk->sec.rsa.p);
- pgp_mpi_hash(md, pk->sec.rsa.q);
- pgp_mpi_hash(md, pk->sec.rsa.u);
- break;
- case PGP_PUB_DSA_SIGN:
- pgp_mpi_hash(md, pk->sec.dsa.x);
- break;
- }
- px_md_finish(md, my_sha1);
- px_md_free(md);
-
- if (memcmp(my_sha1, got_sha1, 20) != 0)
- {
- px_debug("key sha1 check failed");
- res = PXE_PGP_KEYPKT_CORRUPT;
- }
-err:
- memset(got_sha1, 0, 20);
- memset(my_sha1, 0, 20);
- return res;
-}
-
-static int
-check_key_cksum(PullFilter *src, PGP_PubKey *pk)
-{
- int res;
- unsigned got_cksum,
- my_cksum = 0;
- uint8 buf[2];
-
- res = pullf_read_fixed(src, 2, buf);
- if (res < 0)
- return res;
-
- got_cksum = ((unsigned) buf[0] << 8) + buf[1];
- switch (pk->algo)
- {
- case PGP_PUB_ELG_ENCRYPT:
- my_cksum = pgp_mpi_cksum(0, pk->sec.elg.x);
- break;
- case PGP_PUB_RSA_SIGN:
- case PGP_PUB_RSA_ENCRYPT:
- case PGP_PUB_RSA_ENCRYPT_SIGN:
- my_cksum = pgp_mpi_cksum(0, pk->sec.rsa.d);
- my_cksum = pgp_mpi_cksum(my_cksum, pk->sec.rsa.p);
- my_cksum = pgp_mpi_cksum(my_cksum, pk->sec.rsa.q);
- my_cksum = pgp_mpi_cksum(my_cksum, pk->sec.rsa.u);
- break;
- case PGP_PUB_DSA_SIGN:
- my_cksum = pgp_mpi_cksum(0, pk->sec.dsa.x);
- break;
- }
- if (my_cksum != got_cksum)
- {
- px_debug("key cksum check failed");
- return PXE_PGP_KEYPKT_CORRUPT;
- }
- return 0;
-}
-
-static int
-process_secret_key(PullFilter *pkt, PGP_PubKey **pk_p,
- const uint8 *key, int key_len)
-{
- int res;
- int hide_type;
- int cipher_algo;
- int bs;
- uint8 iv[512];
- PullFilter *pf_decrypt = NULL,
- *pf_key;
- PGP_CFB *cfb = NULL;
- PGP_S2K s2k;
- PGP_PubKey *pk;
-
- /* first read public key part */
- res = _pgp_read_public_key(pkt, &pk);
- if (res < 0)
- return res;
-
- /*
- * is secret key encrypted?
- */
- GETBYTE(pkt, hide_type);
- if (hide_type == HIDE_SHA1 || hide_type == HIDE_CKSUM)
- {
- if (key == NULL)
- return PXE_PGP_NEED_SECRET_PSW;
- GETBYTE(pkt, cipher_algo);
- res = pgp_s2k_read(pkt, &s2k);
- if (res < 0)
- return res;
-
- res = pgp_s2k_process(&s2k, cipher_algo, key, key_len);
- if (res < 0)
- return res;
-
- bs = pgp_get_cipher_block_size(cipher_algo);
- if (bs == 0)
- {
- px_debug("unknown cipher algo=%d", cipher_algo);
- return PXE_PGP_UNSUPPORTED_CIPHER;
- }
- res = pullf_read_fixed(pkt, bs, iv);
- if (res < 0)
- return res;
-
- /*
- * create decrypt filter
- */
- res = pgp_cfb_create(&cfb, cipher_algo, s2k.key, s2k.key_len, 0, iv);
- if (res < 0)
- return res;
- res = pullf_create(&pf_decrypt, &pgp_decrypt_filter, cfb, pkt);
- if (res < 0)
- return res;
- pf_key = pf_decrypt;
- }
- else if (hide_type == HIDE_CLEAR)
- {
- pf_key = pkt;
- }
- else
- {
- px_debug("unknown hide type");
- return PXE_PGP_KEYPKT_CORRUPT;
- }
-
- /* read secret key */
- switch (pk->algo)
- {
- case PGP_PUB_RSA_SIGN:
- case PGP_PUB_RSA_ENCRYPT:
- case PGP_PUB_RSA_ENCRYPT_SIGN:
- res = pgp_mpi_read(pkt, &pk->sec.rsa.d);
- if (res < 0)
- break;
- res = pgp_mpi_read(pkt, &pk->sec.rsa.p);
- if (res < 0)
- break;
- res = pgp_mpi_read(pkt, &pk->sec.rsa.q);
- if (res < 0)
- break;
- res = pgp_mpi_read(pkt, &pk->sec.rsa.u);
- if (res < 0)
- break;
- break;
- case PGP_PUB_ELG_ENCRYPT:
- res = pgp_mpi_read(pf_key, &pk->sec.elg.x);
- break;
- case PGP_PUB_DSA_SIGN:
- res = pgp_mpi_read(pf_key, &pk->sec.dsa.x);
- break;
- default:
- px_debug("unknown public algo: %d", pk->algo);
- res = PXE_PGP_KEYPKT_CORRUPT;
- }
- /* read checksum / sha1 */
- if (res >= 0)
- {
- if (hide_type == HIDE_SHA1)
- res = check_key_sha1(pf_key, pk);
- else
- res = check_key_cksum(pf_key, pk);
- }
- if (res >= 0)
- res = pgp_expect_packet_end(pf_key);
-
- if (pf_decrypt)
- pullf_free(pf_decrypt);
- if (cfb)
- pgp_cfb_free(cfb);
-
- if (res < 0)
- pgp_key_free(pk);
- else
- *pk_p = pk;
-
- return res;
-}
-
-static int
-internal_read_key(PullFilter *src, PGP_PubKey **pk_p,
- const uint8 *psw, int psw_len, int pubtype)
-{
- PullFilter *pkt = NULL;
- int res;
- uint8 tag;
- int len;
- PGP_PubKey *enc_key = NULL;
- PGP_PubKey *pk = NULL;
- int got_main_key = 0;
-
- /*
- * Search for encryption key.
- *
- * Error out on anything fancy.
- */
- while (1)
- {
- res = pgp_parse_pkt_hdr(src, &tag, &len, 0);
- if (res <= 0)
- break;
- res = pgp_create_pkt_reader(&pkt, src, len, res, NULL);
- if (res < 0)
- break;
-
- switch (tag)
- {
- case PGP_PKT_PUBLIC_KEY:
- case PGP_PKT_SECRET_KEY:
- if (got_main_key)
- {
- res = PXE_PGP_MULTIPLE_KEYS;
- break;
- }
- got_main_key = 1;
- res = pgp_skip_packet(pkt);
- break;
-
- case PGP_PKT_PUBLIC_SUBKEY:
- if (pubtype != 0)
- res = PXE_PGP_EXPECT_SECRET_KEY;
- else
- res = _pgp_read_public_key(pkt, &pk);
- break;
-
- case PGP_PKT_SECRET_SUBKEY:
- if (pubtype != 1)
- res = PXE_PGP_EXPECT_PUBLIC_KEY;
- else
- res = process_secret_key(pkt, &pk, psw, psw_len);
- break;
-
- case PGP_PKT_SIGNATURE:
- case PGP_PKT_MARKER:
- case PGP_PKT_TRUST:
- case PGP_PKT_USER_ID:
- case PGP_PKT_USER_ATTR:
- case PGP_PKT_PRIV_61:
- res = pgp_skip_packet(pkt);
- break;
- default:
- px_debug("unknown/unexpected packet: %d", tag);
- res = PXE_PGP_UNEXPECTED_PKT;
- }
- pullf_free(pkt);
- pkt = NULL;
-
- if (pk != NULL)
- {
- if (res >= 0 && pk->can_encrypt)
- {
- if (enc_key == NULL)
- {
- enc_key = pk;
- pk = NULL;
- }
- else
- res = PXE_PGP_MULTIPLE_SUBKEYS;
- }
-
- if (pk)
- pgp_key_free(pk);
- pk = NULL;
- }
-
- if (res < 0)
- break;
- }
-
- if (pkt)
- pullf_free(pkt);
-
- if (res < 0)
- {
- if (enc_key)
- pgp_key_free(enc_key);
- return res;
- }
-
- if (!enc_key)
- res = PXE_PGP_NO_USABLE_KEY;
- else
- *pk_p = enc_key;
- return res;
-}
-
-int
-pgp_set_pubkey(PGP_Context *ctx, MBuf *keypkt,
- const uint8 *key, int key_len, int pubtype)
-{
- int res;
- PullFilter *src;
- PGP_PubKey *pk = NULL;
-
- res = pullf_create_mbuf_reader(&src, keypkt);
- if (res < 0)
- return res;
-
- res = internal_read_key(src, &pk, key, key_len, pubtype);
- pullf_free(src);
-
- if (res >= 0)
- ctx->pub_key = pk;
-
- return res < 0 ? res : 0;
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/pgp-s2k.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/pgp-s2k.c b/contrib/pgcrypto/pgp-s2k.c
deleted file mode 100644
index 326b1bb..0000000
--- a/contrib/pgcrypto/pgp-s2k.c
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * pgp-s2k.c
- * OpenPGP string2key functions.
- *
- * Copyright (c) 2005 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/pgp-s2k.c,v 1.5 2009/06/11 14:48:52 momjian Exp $
- */
-
-#include "postgres.h"
-
-#include "px.h"
-#include "mbuf.h"
-#include "pgp.h"
-
-static int
-calc_s2k_simple(PGP_S2K *s2k, PX_MD *md, const uint8 *key,
- unsigned key_len)
-{
- unsigned md_bs,
- md_rlen;
- uint8 buf[PGP_MAX_DIGEST];
- unsigned preload;
- unsigned remain;
- uint8 *dst = s2k->key;
-
- md_bs = px_md_block_size(md);
- md_rlen = px_md_result_size(md);
-
- remain = s2k->key_len;
- preload = 0;
- while (remain > 0)
- {
- px_md_reset(md);
-
- if (preload)
- {
- memset(buf, 0, preload);
- px_md_update(md, buf, preload);
- }
- preload++;
-
- px_md_update(md, key, key_len);
- px_md_finish(md, buf);
-
- if (remain > md_rlen)
- {
- memcpy(dst, buf, md_rlen);
- dst += md_rlen;
- remain -= md_rlen;
- }
- else
- {
- memcpy(dst, buf, remain);
- remain = 0;
- }
- }
- return 0;
-}
-
-static int
-calc_s2k_salted(PGP_S2K *s2k, PX_MD *md, const uint8 *key, unsigned key_len)
-{
- unsigned md_bs,
- md_rlen;
- uint8 buf[PGP_MAX_DIGEST];
- unsigned preload = 0;
- uint8 *dst;
- unsigned remain;
-
- md_bs = px_md_block_size(md);
- md_rlen = px_md_result_size(md);
-
- dst = s2k->key;
- remain = s2k->key_len;
- while (remain > 0)
- {
- px_md_reset(md);
-
- if (preload > 0)
- {
- memset(buf, 0, preload);
- px_md_update(md, buf, preload);
- }
- preload++;
-
- px_md_update(md, s2k->salt, PGP_S2K_SALT);
- px_md_update(md, key, key_len);
- px_md_finish(md, buf);
-
- if (remain > md_rlen)
- {
- memcpy(dst, buf, md_rlen);
- remain -= md_rlen;
- dst += md_rlen;
- }
- else
- {
- memcpy(dst, buf, remain);
- remain = 0;
- }
- }
- return 0;
-}
-
-static int
-calc_s2k_iter_salted(PGP_S2K *s2k, PX_MD *md, const uint8 *key,
- unsigned key_len)
-{
- unsigned md_bs,
- md_rlen;
- uint8 buf[PGP_MAX_DIGEST];
- uint8 *dst;
- unsigned preload = 0;
- unsigned remain,
- c,
- cval,
- curcnt,
- count;
-
- cval = s2k->iter;
- count = ((unsigned) 16 + (cval & 15)) << ((cval >> 4) + 6);
-
- md_bs = px_md_block_size(md);
- md_rlen = px_md_result_size(md);
-
- remain = s2k->key_len;
- dst = s2k->key;
- while (remain > 0)
- {
- px_md_reset(md);
-
- if (preload)
- {
- memset(buf, 0, preload);
- px_md_update(md, buf, preload);
- }
- preload++;
-
- px_md_update(md, s2k->salt, PGP_S2K_SALT);
- px_md_update(md, key, key_len);
- curcnt = PGP_S2K_SALT + key_len;
-
- while (curcnt < count)
- {
- if (curcnt + PGP_S2K_SALT < count)
- c = PGP_S2K_SALT;
- else
- c = count - curcnt;
- px_md_update(md, s2k->salt, c);
- curcnt += c;
-
- if (curcnt + key_len < count)
- c = key_len;
- else if (curcnt < count)
- c = count - curcnt;
- else
- break;
- px_md_update(md, key, c);
- curcnt += c;
- }
- px_md_finish(md, buf);
-
- if (remain > md_rlen)
- {
- memcpy(dst, buf, md_rlen);
- remain -= md_rlen;
- dst += md_rlen;
- }
- else
- {
- memcpy(dst, buf, remain);
- remain = 0;
- }
- }
- return 0;
-}
-
-/*
- * Decide S2K_ISALTED iteration count
- *
- * Too small: weak
- * Too big: slow
- * gpg defaults to 96 => 65536 iters
- * let it float a bit: 96 + 32 => 262144 iters
- */
-static int
-decide_count(unsigned rand_byte)
-{
- return 96 + (rand_byte & 0x1F);
-}
-
-int
-pgp_s2k_fill(PGP_S2K *s2k, int mode, int digest_algo)
-{
- int res = 0;
- uint8 tmp;
-
- s2k->mode = mode;
- s2k->digest_algo = digest_algo;
-
- switch (s2k->mode)
- {
- case 0:
- break;
- case 1:
- res = px_get_pseudo_random_bytes(s2k->salt, PGP_S2K_SALT);
- break;
- case 3:
- res = px_get_pseudo_random_bytes(s2k->salt, PGP_S2K_SALT);
- if (res < 0)
- break;
- res = px_get_pseudo_random_bytes(&tmp, 1);
- if (res < 0)
- break;
- s2k->iter = decide_count(tmp);
- break;
- default:
- res = PXE_PGP_BAD_S2K_MODE;
- }
- return res;
-}
-
-int
-pgp_s2k_read(PullFilter *src, PGP_S2K *s2k)
-{
- int res = 0;
-
- GETBYTE(src, s2k->mode);
- GETBYTE(src, s2k->digest_algo);
- switch (s2k->mode)
- {
- case 0:
- break;
- case 1:
- res = pullf_read_fixed(src, 8, s2k->salt);
- break;
- case 3:
- res = pullf_read_fixed(src, 8, s2k->salt);
- if (res < 0)
- break;
- GETBYTE(src, s2k->iter);
- break;
- default:
- res = PXE_PGP_BAD_S2K_MODE;
- }
- return res;
-}
-
-int
-pgp_s2k_process(PGP_S2K *s2k, int cipher, const uint8 *key, int key_len)
-{
- int res;
- PX_MD *md;
-
- s2k->key_len = pgp_get_cipher_key_size(cipher);
- if (s2k->key_len <= 0)
- return PXE_PGP_UNSUPPORTED_CIPHER;
-
- res = pgp_load_digest(s2k->digest_algo, &md);
- if (res < 0)
- return res;
-
- switch (s2k->mode)
- {
- case 0:
- res = calc_s2k_simple(s2k, md, key, key_len);
- break;
- case 1:
- res = calc_s2k_salted(s2k, md, key, key_len);
- break;
- case 3:
- res = calc_s2k_iter_salted(s2k, md, key, key_len);
- break;
- default:
- res = PXE_PGP_BAD_S2K_MODE;
- }
- px_md_free(md);
- return res;
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/pgp.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/pgp.c b/contrib/pgcrypto/pgp.c
deleted file mode 100644
index ce6f199..0000000
--- a/contrib/pgcrypto/pgp.c
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- * pgp.c
- * Various utility stuff.
- *
- * Copyright (c) 2005 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/pgp.c,v 1.4 2009/06/11 14:48:52 momjian Exp $
- */
-
-#include "postgres.h"
-
-#include "px.h"
-#include "mbuf.h"
-#include "pgp.h"
-
-/*
- * Defaults.
- */
-static int def_cipher_algo = PGP_SYM_AES_128;
-static int def_s2k_cipher_algo = -1;
-static int def_s2k_mode = PGP_S2K_ISALTED;
-static int def_s2k_digest_algo = PGP_DIGEST_SHA1;
-static int def_compress_algo = PGP_COMPR_NONE;
-static int def_compress_level = 6;
-static int def_disable_mdc = 0;
-static int def_use_sess_key = 0;
-static int def_text_mode = 0;
-static int def_unicode_mode = 0;
-static int def_convert_crlf = 0;
-
-struct digest_info
-{
- const char *name;
- int code;
- const char *int_name;
-};
-
-struct cipher_info
-{
- const char *name;
- int code;
- const char *int_name;
- int key_len;
- int block_len;
-};
-
-static const struct digest_info digest_list[] = {
- {"md5", PGP_DIGEST_MD5},
- {"sha1", PGP_DIGEST_SHA1},
- {"sha-1", PGP_DIGEST_SHA1},
- {"ripemd160", PGP_DIGEST_RIPEMD160},
- {"sha256", PGP_DIGEST_SHA256},
- {"sha384", PGP_DIGEST_SHA384},
- {"sha512", PGP_DIGEST_SHA512},
- {NULL, 0}
-};
-
-static const struct cipher_info cipher_list[] = {
- {"3des", PGP_SYM_DES3, "3des-ecb", 192 / 8, 64 / 8},
- {"cast5", PGP_SYM_CAST5, "cast5-ecb", 128 / 8, 64 / 8},
- {"bf", PGP_SYM_BLOWFISH, "bf-ecb", 128 / 8, 64 / 8},
- {"blowfish", PGP_SYM_BLOWFISH, "bf-ecb", 128 / 8, 64 / 8},
- {"aes", PGP_SYM_AES_128, "aes-ecb", 128 / 8, 128 / 8},
- {"aes128", PGP_SYM_AES_128, "aes-ecb", 128 / 8, 128 / 8},
- {"aes192", PGP_SYM_AES_192, "aes-ecb", 192 / 8, 128 / 8},
- {"aes256", PGP_SYM_AES_256, "aes-ecb", 256 / 8, 128 / 8},
- {"twofish", PGP_SYM_TWOFISH, "twofish-ecb", 256 / 8, 128 / 8},
- {NULL, 0, NULL}
-};
-
-static const struct cipher_info *
-get_cipher_info(int code)
-{
- const struct cipher_info *i;
-
- for (i = cipher_list; i->name; i++)
- if (i->code == code)
- return i;
- return NULL;
-}
-
-int
-pgp_get_digest_code(const char *name)
-{
- const struct digest_info *i;
-
- for (i = digest_list; i->name; i++)
- if (pg_strcasecmp(i->name, name) == 0)
- return i->code;
- return PXE_PGP_UNSUPPORTED_HASH;
-}
-
-int
-pgp_get_cipher_code(const char *name)
-{
- const struct cipher_info *i;
-
- for (i = cipher_list; i->name; i++)
- if (pg_strcasecmp(i->name, name) == 0)
- return i->code;
- return PXE_PGP_UNSUPPORTED_CIPHER;
-}
-
-const char *
-pgp_get_digest_name(int code)
-{
- const struct digest_info *i;
-
- for (i = digest_list; i->name; i++)
- if (i->code == code)
- return i->name;
- return NULL;
-}
-
-const char *
-pgp_get_cipher_name(int code)
-{
- const struct cipher_info *i = get_cipher_info(code);
-
- if (i != NULL)
- return i->name;
- return NULL;
-}
-
-int
-pgp_get_cipher_key_size(int code)
-{
- const struct cipher_info *i = get_cipher_info(code);
-
- if (i != NULL)
- return i->key_len;
- return 0;
-}
-
-int
-pgp_get_cipher_block_size(int code)
-{
- const struct cipher_info *i = get_cipher_info(code);
-
- if (i != NULL)
- return i->block_len;
- return 0;
-}
-
-int
-pgp_load_cipher(int code, PX_Cipher **res)
-{
- int err;
- const struct cipher_info *i = get_cipher_info(code);
-
- if (i == NULL)
- return PXE_PGP_CORRUPT_DATA;
-
- err = px_find_cipher(i->int_name, res);
- if (err == 0)
- return 0;
-
- return PXE_PGP_UNSUPPORTED_CIPHER;
-}
-
-int
-pgp_load_digest(int code, PX_MD **res)
-{
- int err;
- const char *name = pgp_get_digest_name(code);
-
- if (name == NULL)
- return PXE_PGP_CORRUPT_DATA;
-
- err = px_find_digest(name, res);
- if (err == 0)
- return 0;
-
- return PXE_PGP_UNSUPPORTED_HASH;
-}
-
-int
-pgp_init(PGP_Context **ctx_p)
-{
- PGP_Context *ctx;
-
- ctx = px_alloc(sizeof *ctx);
- memset(ctx, 0, sizeof *ctx);
-
- ctx->cipher_algo = def_cipher_algo;
- ctx->s2k_cipher_algo = def_s2k_cipher_algo;
- ctx->s2k_mode = def_s2k_mode;
- ctx->s2k_digest_algo = def_s2k_digest_algo;
- ctx->compress_algo = def_compress_algo;
- ctx->compress_level = def_compress_level;
- ctx->disable_mdc = def_disable_mdc;
- ctx->use_sess_key = def_use_sess_key;
- ctx->unicode_mode = def_unicode_mode;
- ctx->convert_crlf = def_convert_crlf;
- ctx->text_mode = def_text_mode;
-
- *ctx_p = ctx;
- return 0;
-}
-
-int
-pgp_free(PGP_Context *ctx)
-{
- if (ctx->pub_key)
- pgp_key_free(ctx->pub_key);
- memset(ctx, 0, sizeof *ctx);
- px_free(ctx);
- return 0;
-}
-
-int
-pgp_disable_mdc(PGP_Context *ctx, int disable)
-{
- ctx->disable_mdc = disable ? 1 : 0;
- return 0;
-}
-
-int
-pgp_set_sess_key(PGP_Context *ctx, int use)
-{
- ctx->use_sess_key = use ? 1 : 0;
- return 0;
-}
-
-int
-pgp_set_convert_crlf(PGP_Context *ctx, int doit)
-{
- ctx->convert_crlf = doit ? 1 : 0;
- return 0;
-}
-
-int
-pgp_set_s2k_mode(PGP_Context *ctx, int mode)
-{
- int err = PXE_OK;
-
- switch (mode)
- {
- case PGP_S2K_SIMPLE:
- case PGP_S2K_SALTED:
- case PGP_S2K_ISALTED:
- ctx->s2k_mode = mode;
- break;
- default:
- err = PXE_ARGUMENT_ERROR;
- break;
- }
- return err;
-}
-
-int
-pgp_set_compress_algo(PGP_Context *ctx, int algo)
-{
- switch (algo)
- {
- case PGP_COMPR_NONE:
- case PGP_COMPR_ZIP:
- case PGP_COMPR_ZLIB:
- case PGP_COMPR_BZIP2:
- ctx->compress_algo = algo;
- return 0;
- }
- return PXE_ARGUMENT_ERROR;
-}
-
-int
-pgp_set_compress_level(PGP_Context *ctx, int level)
-{
- if (level >= 0 && level <= 9)
- {
- ctx->compress_level = level;
- return 0;
- }
- return PXE_ARGUMENT_ERROR;
-}
-
-int
-pgp_set_text_mode(PGP_Context *ctx, int mode)
-{
- ctx->text_mode = mode;
- return 0;
-}
-
-int
-pgp_set_cipher_algo(PGP_Context *ctx, const char *name)
-{
- int code = pgp_get_cipher_code(name);
-
- if (code < 0)
- return code;
- ctx->cipher_algo = code;
- return 0;
-}
-
-int
-pgp_set_s2k_cipher_algo(PGP_Context *ctx, const char *name)
-{
- int code = pgp_get_cipher_code(name);
-
- if (code < 0)
- return code;
- ctx->s2k_cipher_algo = code;
- return 0;
-}
-
-int
-pgp_set_s2k_digest_algo(PGP_Context *ctx, const char *name)
-{
- int code = pgp_get_digest_code(name);
-
- if (code < 0)
- return code;
- ctx->s2k_digest_algo = code;
- return 0;
-}
-
-int
-pgp_get_unicode_mode(PGP_Context *ctx)
-{
- return ctx->unicode_mode;
-}
-
-int
-pgp_set_unicode_mode(PGP_Context *ctx, int mode)
-{
- ctx->unicode_mode = mode ? 1 : 0;
- return 0;
-}
-
-int
-pgp_set_symkey(PGP_Context *ctx, const uint8 *key, int len)
-{
- if (key == NULL || len < 1)
- return PXE_ARGUMENT_ERROR;
- ctx->sym_key = key;
- ctx->sym_key_len = len;
- return 0;
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/pgp.h
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/pgp.h b/contrib/pgcrypto/pgp.h
deleted file mode 100644
index 7860d83..0000000
--- a/contrib/pgcrypto/pgp.h
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- * pgp.h
- * OpenPGP implementation.
- *
- * Copyright (c) 2005 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/pgp.h,v 1.6 2009/06/11 14:48:52 momjian Exp $
- */
-
-enum PGP_S2K_TYPE
-{
- PGP_S2K_SIMPLE = 0,
- PGP_S2K_SALTED = 1,
- PGP_S2K_ISALTED = 3
-};
-
-enum PGP_PKT_TYPE
-{
- PGP_PKT_RESERVED = 0,
- PGP_PKT_PUBENCRYPTED_SESSKEY = 1,
- PGP_PKT_SIGNATURE = 2,
- PGP_PKT_SYMENCRYPTED_SESSKEY = 3,
- PGP_PKT_SECRET_KEY = 5,
- PGP_PKT_PUBLIC_KEY = 6,
- PGP_PKT_SECRET_SUBKEY = 7,
- PGP_PKT_COMPRESSED_DATA = 8,
- PGP_PKT_SYMENCRYPTED_DATA = 9,
- PGP_PKT_MARKER = 10,
- PGP_PKT_LITERAL_DATA = 11,
- PGP_PKT_TRUST = 12,
- PGP_PKT_USER_ID = 13,
- PGP_PKT_PUBLIC_SUBKEY = 14,
- PGP_PKT_USER_ATTR = 17,
- PGP_PKT_SYMENCRYPTED_DATA_MDC = 18,
- PGP_PKT_MDC = 19,
- PGP_PKT_PRIV_61 = 61 /* occurs in gpg secring */
-};
-
-enum PGP_PUB_ALGO_TYPE
-{
- PGP_PUB_RSA_ENCRYPT_SIGN = 1,
- PGP_PUB_RSA_ENCRYPT = 2,
- PGP_PUB_RSA_SIGN = 3,
- PGP_PUB_ELG_ENCRYPT = 16,
- PGP_PUB_DSA_SIGN = 17
-};
-
-enum PGP_SYMENC_TYPE
-{
- PGP_SYM_PLAIN = 0, /* ?? */
- PGP_SYM_IDEA = 1, /* obsolete, PGP 2.6 compat */
- PGP_SYM_DES3 = 2, /* must */
- PGP_SYM_CAST5 = 3, /* should */
- PGP_SYM_BLOWFISH = 4,
- PGP_SYM_SAFER_SK128 = 5, /* obsolete */
- PGP_SYM_DES_SK = 6, /* obsolete */
- PGP_SYM_AES_128 = 7, /* should */
- PGP_SYM_AES_192 = 8,
- PGP_SYM_AES_256 = 9,
- PGP_SYM_TWOFISH = 10
-};
-
-enum PGP_COMPR_TYPE
-{
- PGP_COMPR_NONE = 0, /* must */
- PGP_COMPR_ZIP = 1, /* should */
- PGP_COMPR_ZLIB = 2,
- PGP_COMPR_BZIP2 = 3
-};
-
-enum PGP_DIGEST_TYPE
-{
- PGP_DIGEST_MD5 = 1, /* should, deprecated */
- PGP_DIGEST_SHA1 = 2, /* must */
- PGP_DIGEST_RIPEMD160 = 3,
- PGP_DIGEST_XSHA = 4, /* obsolete */
- PGP_DIGEST_MD2 = 5, /* obsolete */
- PGP_DIGEST_TIGER192 = 6, /* obsolete */
- PGP_DIGEST_HAVAL5_160 = 7, /* obsolete */
- PGP_DIGEST_SHA256 = 8,
- PGP_DIGEST_SHA384 = 9,
- PGP_DIGEST_SHA512 = 10
-};
-
-#define PGP_MAX_KEY (256/8)
-#define PGP_MAX_BLOCK (256/8)
-#define PGP_MAX_DIGEST (512/8)
-#define PGP_S2K_SALT 8
-
-typedef struct PGP_MPI PGP_MPI;
-typedef struct PGP_PubKey PGP_PubKey;
-typedef struct PGP_Context PGP_Context;
-typedef struct PGP_S2K PGP_S2K;
-
-struct PGP_S2K
-{
- uint8 mode;
- uint8 digest_algo;
- uint8 salt[8];
- uint8 iter;
- /* calculated: */
- uint8 key[PGP_MAX_KEY];
- uint8 key_len;
-};
-
-
-struct PGP_Context
-{
- /*
- * parameters
- */
- PGP_S2K s2k;
- int s2k_mode;
- int s2k_digest_algo;
- int s2k_cipher_algo;
- int cipher_algo;
- int compress_algo;
- int compress_level;
- int disable_mdc;
- int use_sess_key;
- int text_mode;
- int convert_crlf;
- int unicode_mode;
-
- /*
- * internal variables
- */
- int mdc_checked;
- int corrupt_prefix;
- int in_mdc_pkt;
- int use_mdcbuf_filter;
- PX_MD *mdc_ctx;
-
- PGP_PubKey *pub_key; /* ctx owns it */
- const uint8 *sym_key; /* ctx does not own it */
- int sym_key_len;
-
- /*
- * read or generated data
- */
- uint8 sess_key[PGP_MAX_KEY];
- unsigned sess_key_len;
-};
-
-struct PGP_MPI
-{
- uint8 *data;
- int bits;
- int bytes;
-};
-
-struct PGP_PubKey
-{
- uint8 ver;
- uint8 time[4];
- uint8 algo;
-
- /* public part */
- union
- {
- struct
- {
- PGP_MPI *p;
- PGP_MPI *g;
- PGP_MPI *y;
- } elg;
- struct
- {
- PGP_MPI *n;
- PGP_MPI *e;
- } rsa;
- struct
- {
- PGP_MPI *p;
- PGP_MPI *q;
- PGP_MPI *g;
- PGP_MPI *y;
- } dsa;
- } pub;
-
- /* secret part */
- union
- {
- struct
- {
- PGP_MPI *x;
- } elg;
- struct
- {
- PGP_MPI *d;
- PGP_MPI *p;
- PGP_MPI *q;
- PGP_MPI *u;
- } rsa;
- struct
- {
- PGP_MPI *x;
- } dsa;
- } sec;
-
- uint8 key_id[8];
- int can_encrypt;
-};
-
-int pgp_init(PGP_Context **ctx);
-int pgp_encrypt(PGP_Context *ctx, MBuf *src, MBuf *dst);
-int pgp_decrypt(PGP_Context *ctx, MBuf *src, MBuf *dst);
-int pgp_free(PGP_Context *ctx);
-
-int pgp_get_digest_code(const char *name);
-int pgp_get_cipher_code(const char *name);
-const char *pgp_get_digest_name(int code);
-const char *pgp_get_cipher_name(int code);
-
-int pgp_set_cipher_algo(PGP_Context *ctx, const char *name);
-int pgp_set_s2k_mode(PGP_Context *ctx, int type);
-int pgp_set_s2k_cipher_algo(PGP_Context *ctx, const char *name);
-int pgp_set_s2k_digest_algo(PGP_Context *ctx, const char *name);
-int pgp_set_convert_crlf(PGP_Context *ctx, int doit);
-int pgp_disable_mdc(PGP_Context *ctx, int disable);
-int pgp_set_sess_key(PGP_Context *ctx, int use);
-int pgp_set_compress_algo(PGP_Context *ctx, int algo);
-int pgp_set_compress_level(PGP_Context *ctx, int level);
-int pgp_set_text_mode(PGP_Context *ctx, int mode);
-int pgp_set_unicode_mode(PGP_Context *ctx, int mode);
-int pgp_get_unicode_mode(PGP_Context *ctx);
-
-int pgp_set_symkey(PGP_Context *ctx, const uint8 *key, int klen);
-int pgp_set_pubkey(PGP_Context *ctx, MBuf *keypkt,
- const uint8 *key, int klen, int pubtype);
-
-int pgp_get_keyid(MBuf *pgp_data, char *dst);
-
-/* internal functions */
-
-int pgp_load_digest(int c, PX_MD **res);
-int pgp_load_cipher(int c, PX_Cipher **res);
-int pgp_get_cipher_key_size(int c);
-int pgp_get_cipher_block_size(int c);
-
-int pgp_s2k_fill(PGP_S2K *s2k, int mode, int digest_algo);
-int pgp_s2k_read(PullFilter *src, PGP_S2K *s2k);
-int pgp_s2k_process(PGP_S2K *s2k, int cipher, const uint8 *key, int klen);
-
-typedef struct PGP_CFB PGP_CFB;
-int
-pgp_cfb_create(PGP_CFB **ctx_p, int algo,
- const uint8 *key, int key_len, int recync, uint8 *iv);
-void pgp_cfb_free(PGP_CFB *ctx);
-int pgp_cfb_encrypt(PGP_CFB *ctx, const uint8 *data, int len, uint8 *dst);
-int pgp_cfb_decrypt(PGP_CFB *ctx, const uint8 *data, int len, uint8 *dst);
-
-int pgp_armor_encode(const uint8 *src, unsigned len, uint8 *dst);
-int pgp_armor_decode(const uint8 *src, unsigned len, uint8 *dst);
-unsigned pgp_armor_enc_len(unsigned len);
-unsigned pgp_armor_dec_len(unsigned len);
-
-int pgp_compress_filter(PushFilter **res, PGP_Context *ctx, PushFilter *dst);
-int pgp_decompress_filter(PullFilter **res, PGP_Context *ctx, PullFilter *src);
-
-int pgp_key_alloc(PGP_PubKey **pk_p);
-void pgp_key_free(PGP_PubKey *pk);
-int _pgp_read_public_key(PullFilter *pkt, PGP_PubKey **pk_p);
-
-int pgp_parse_pubenc_sesskey(PGP_Context *ctx, PullFilter *pkt);
-int pgp_create_pkt_reader(PullFilter **pf_p, PullFilter *src, int len,
- int pkttype, PGP_Context *ctx);
-int pgp_parse_pkt_hdr(PullFilter *src, uint8 *tag, int *len_p,
- int allow_ctx);
-
-int pgp_skip_packet(PullFilter *pkt);
-int pgp_expect_packet_end(PullFilter *pkt);
-
-int pgp_write_pubenc_sesskey(PGP_Context *ctx, PushFilter *dst);
-int pgp_create_pkt_writer(PushFilter *dst, int tag, PushFilter **res_p);
-
-int pgp_mpi_alloc(int bits, PGP_MPI **mpi);
-int pgp_mpi_create(uint8 *data, int bits, PGP_MPI **mpi);
-int pgp_mpi_free(PGP_MPI *mpi);
-int pgp_mpi_read(PullFilter *src, PGP_MPI **mpi);
-int pgp_mpi_write(PushFilter *dst, PGP_MPI *n);
-int pgp_mpi_hash(PX_MD *md, PGP_MPI *n);
-unsigned pgp_mpi_cksum(unsigned cksum, PGP_MPI *n);
-
-int pgp_elgamal_encrypt(PGP_PubKey *pk, PGP_MPI *m,
- PGP_MPI **c1, PGP_MPI **c2);
-int pgp_elgamal_decrypt(PGP_PubKey *pk, PGP_MPI *c1, PGP_MPI *c2,
- PGP_MPI **m);
-int pgp_rsa_encrypt(PGP_PubKey *pk, PGP_MPI *m, PGP_MPI **c);
-int pgp_rsa_decrypt(PGP_PubKey *pk, PGP_MPI *c, PGP_MPI **m);
-
-extern struct PullFilterOps pgp_decrypt_filter;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/px-crypt.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/px-crypt.c b/contrib/pgcrypto/px-crypt.c
deleted file mode 100644
index d2e1682..0000000
--- a/contrib/pgcrypto/px-crypt.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * px-crypt.c
- * Wrapper for various crypt algorithms.
- *
- * Copyright (c) 2001 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * contrib/pgcrypto/px-crypt.c
- */
-
-#include "postgres.h"
-
-#include "px.h"
-#include "px-crypt.h"
-
-
-static char *
-run_crypt_des(const char *psw, const char *salt,
- char *buf, unsigned len)
-{
- char *res;
-
- res = px_crypt_des(psw, salt);
- if (strlen(res) > len - 1)
- return NULL;
- strcpy(buf, res);
- return buf;
-}
-
-static char *
-run_crypt_md5(const char *psw, const char *salt,
- char *buf, unsigned len)
-{
- char *res;
-
- res = px_crypt_md5(psw, salt, buf, len);
- return res;
-}
-
-static char *
-run_crypt_bf(const char *psw, const char *salt,
- char *buf, unsigned len)
-{
- char *res;
-
- res = _crypt_blowfish_rn(psw, salt, buf, len);
- return res;
-}
-
-struct px_crypt_algo
-{
- char *id;
- unsigned id_len;
- char *(*crypt) (const char *psw, const char *salt,
- char *buf, unsigned len);
-};
-
-static const struct px_crypt_algo
- px_crypt_list[] = {
- {"$2a$", 4, run_crypt_bf},
- {"$2x$", 4, run_crypt_bf},
- {"$2$", 3, NULL}, /* N/A */
- {"$1$", 3, run_crypt_md5},
- {"_", 1, run_crypt_des},
- {"", 0, run_crypt_des},
- {NULL, 0, NULL}
-};
-
-char *
-px_crypt(const char *psw, const char *salt, char *buf, unsigned len)
-{
- const struct px_crypt_algo *c;
-
- for (c = px_crypt_list; c->id; c++)
- {
- if (!c->id_len)
- break;
- if (!strncmp(salt, c->id, c->id_len))
- break;
- }
-
- if (c->crypt == NULL)
- return NULL;
-
- return c->crypt(psw, salt, buf, len);
-}
-
-/*
- * salt generators
- */
-
-struct generator
-{
- char *name;
- char *(*gen) (unsigned long count, const char *input, int size,
- char *output, int output_size);
- int input_len;
- int def_rounds;
- int min_rounds;
- int max_rounds;
-};
-
-static struct generator gen_list[] = {
- {"des", _crypt_gensalt_traditional_rn, 2, 0, 0, 0},
- {"md5", _crypt_gensalt_md5_rn, 6, 0, 0, 0},
- {"xdes", _crypt_gensalt_extended_rn, 3, PX_XDES_ROUNDS, 1, 0xFFFFFF},
- {"bf", _crypt_gensalt_blowfish_rn, 16, PX_BF_ROUNDS, 4, 31},
- {NULL, NULL, 0, 0, 0, 0}
-};
-
-int
-px_gen_salt(const char *salt_type, char *buf, int rounds)
-{
- int res;
- struct generator *g;
- char *p;
- char rbuf[16];
-
- for (g = gen_list; g->name; g++)
- if (pg_strcasecmp(g->name, salt_type) == 0)
- break;
-
- if (g->name == NULL)
- return PXE_UNKNOWN_SALT_ALGO;
-
- if (g->def_rounds)
- {
- if (rounds == 0)
- rounds = g->def_rounds;
-
- if (rounds < g->min_rounds || rounds > g->max_rounds)
- return PXE_BAD_SALT_ROUNDS;
- }
-
- res = px_get_pseudo_random_bytes((uint8 *) rbuf, g->input_len);
- if (res < 0)
- return res;
-
- p = g->gen(rounds, rbuf, g->input_len, buf, PX_MAX_SALT_LEN);
- memset(rbuf, 0, sizeof(rbuf));
-
- if (p == NULL)
- return PXE_BAD_SALT_ROUNDS;
-
- return strlen(p);
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/px-crypt.h
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/px-crypt.h b/contrib/pgcrypto/px-crypt.h
deleted file mode 100644
index c2460cb..0000000
--- a/contrib/pgcrypto/px-crypt.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * px-crypt.h
- * Header file for px_crypt().
- *
- * Copyright (c) 2001 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/px-crypt.h,v 1.10 2006/07/13 04:15:25 neilc Exp $
- */
-
-#ifndef _PX_CRYPT_H
-#define _PX_CRYPT_H
-
-/* max room for result */
-#define PX_MAX_CRYPT 128
-
-/* max salt returned by gen_salt() */
-#define PX_MAX_SALT_LEN 128
-
-/* default rounds for xdes salt */
-/* NetBSD bin/passwd/local_passwd.c has (29 * 25)*/
-#define PX_XDES_ROUNDS (29 * 25)
-
-/* default for blowfish salt */
-#define PX_BF_ROUNDS 6
-
-/*
- * main interface
- */
-char *px_crypt(const char *psw, const char *salt, char *buf, unsigned buflen);
-int px_gen_salt(const char *salt_type, char *dst, int rounds);
-
-/*
- * internal functions
- */
-
-/* crypt-gensalt.c */
-char *_crypt_gensalt_traditional_rn(unsigned long count,
- const char *input, int size, char *output, int output_size);
-char *_crypt_gensalt_extended_rn(unsigned long count,
- const char *input, int size, char *output, int output_size);
-char *_crypt_gensalt_md5_rn(unsigned long count,
- const char *input, int size, char *output, int output_size);
-char *_crypt_gensalt_blowfish_rn(unsigned long count,
- const char *input, int size, char *output, int output_size);
-
-/* disable 'extended DES crypt' */
-/* #define DISABLE_XDES */
-
-/* crypt-blowfish.c */
-char *_crypt_blowfish_rn(const char *key, const char *setting,
- char *output, int size);
-
-/* crypt-des.c */
-char *px_crypt_des(const char *key, const char *setting);
-
-/* crypt-md5.c */
-char *px_crypt_md5(const char *pw, const char *salt,
- char *dst, unsigned dstlen);
-
-#endif /* _PX_CRYPT_H */
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/px-hmac.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/px-hmac.c b/contrib/pgcrypto/px-hmac.c
deleted file mode 100644
index 3b20161..0000000
--- a/contrib/pgcrypto/px-hmac.c
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * px-hmac.c
- * HMAC implementation.
- *
- * Copyright (c) 2001 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/px-hmac.c,v 1.8 2009/06/11 14:48:52 momjian Exp $
- */
-
-#include "postgres.h"
-
-#include "px.h"
-
-#define HMAC_IPAD 0x36
-#define HMAC_OPAD 0x5C
-
-static unsigned
-hmac_result_size(PX_HMAC *h)
-{
- return px_md_result_size(h->md);
-}
-
-static unsigned
-hmac_block_size(PX_HMAC *h)
-{
- return px_md_block_size(h->md);
-}
-
-static void
-hmac_init(PX_HMAC *h, const uint8 *key, unsigned klen)
-{
- unsigned bs,
- hlen,
- i;
- uint8 *keybuf;
- PX_MD *md = h->md;
-
- bs = px_md_block_size(md);
- hlen = px_md_result_size(md);
- keybuf = px_alloc(bs);
- memset(keybuf, 0, bs);
-
- if (klen > bs)
- {
- px_md_update(md, key, klen);
- px_md_finish(md, keybuf);
- px_md_reset(md);
- }
- else
- memcpy(keybuf, key, klen);
-
- for (i = 0; i < bs; i++)
- {
- h->p.ipad[i] = keybuf[i] ^ HMAC_IPAD;
- h->p.opad[i] = keybuf[i] ^ HMAC_OPAD;
- }
-
- memset(keybuf, 0, bs);
- px_free(keybuf);
-
- px_md_update(md, h->p.ipad, bs);
-}
-
-static void
-hmac_reset(PX_HMAC *h)
-{
- PX_MD *md = h->md;
- unsigned bs = px_md_block_size(md);
-
- px_md_reset(md);
- px_md_update(md, h->p.ipad, bs);
-}
-
-static void
-hmac_update(PX_HMAC *h, const uint8 *data, unsigned dlen)
-{
- px_md_update(h->md, data, dlen);
-}
-
-static void
-hmac_finish(PX_HMAC *h, uint8 *dst)
-{
- PX_MD *md = h->md;
- unsigned bs,
- hlen;
- uint8 *buf;
-
- bs = px_md_block_size(md);
- hlen = px_md_result_size(md);
-
- buf = px_alloc(hlen);
-
- px_md_finish(md, buf);
-
- px_md_reset(md);
- px_md_update(md, h->p.opad, bs);
- px_md_update(md, buf, hlen);
- px_md_finish(md, dst);
-
- memset(buf, 0, hlen);
- px_free(buf);
-}
-
-static void
-hmac_free(PX_HMAC *h)
-{
- unsigned bs;
-
- bs = px_md_block_size(h->md);
- px_md_free(h->md);
-
- memset(h->p.ipad, 0, bs);
- memset(h->p.opad, 0, bs);
- px_free(h->p.ipad);
- px_free(h->p.opad);
- px_free(h);
-}
-
-
-/* PUBLIC FUNCTIONS */
-
-int
-px_find_hmac(const char *name, PX_HMAC **res)
-{
- int err;
- PX_MD *md;
- PX_HMAC *h;
- unsigned bs;
-
- err = px_find_digest(name, &md);
- if (err)
- return err;
-
- bs = px_md_block_size(md);
- if (bs < 2)
- {
- px_md_free(md);
- return PXE_HASH_UNUSABLE_FOR_HMAC;
- }
-
- h = px_alloc(sizeof(*h));
- h->p.ipad = px_alloc(bs);
- h->p.opad = px_alloc(bs);
- h->md = md;
-
- h->result_size = hmac_result_size;
- h->block_size = hmac_block_size;
- h->reset = hmac_reset;
- h->update = hmac_update;
- h->finish = hmac_finish;
- h->free = hmac_free;
- h->init = hmac_init;
-
- *res = h;
-
- return 0;
-}
[08/11] incubator-hawq git commit: HAWQ-394. Remove pgcrypto from
code base
Posted by hu...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/imath.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/imath.c b/contrib/pgcrypto/imath.c
deleted file mode 100644
index 35dc652..0000000
--- a/contrib/pgcrypto/imath.c
+++ /dev/null
@@ -1,3681 +0,0 @@
-/* imath version 1.3 */
-/*
- Name: imath.c
- Purpose: Arbitrary precision integer arithmetic routines.
- Author: M. J. Fromberger <http://www.dartmouth.edu/~sting/>
- Info: Id: imath.c 21 2006-04-02 18:58:36Z sting
-
- Copyright (C) 2002 Michael J. Fromberger, All Rights Reserved.
-
- Permission is hereby granted, free of charge, to any person
- obtaining a copy of this software and associated documentation files
- (the "Software"), to deal in the Software without restriction,
- including without limitation the rights to use, copy, modify, merge,
- publish, distribute, sublicense, and/or sell copies of the Software,
- and to permit persons to whom the Software is furnished to do so,
- subject to the following conditions:
-
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
- */
-/* $PostgreSQL: pgsql/contrib/pgcrypto/imath.c,v 1.8 2009/06/11 14:48:52 momjian Exp $ */
-
-#include "postgres.h"
-#include "px.h"
-#include "imath.h"
-
-#undef assert
-#define assert(TEST) Assert(TEST)
-#define TRACEABLE_CLAMP 0
-#define TRACEABLE_FREE 0
-
-/* {{{ Constants */
-
-const mp_result MP_OK = 0; /* no error, all is well */
-const mp_result MP_FALSE = 0; /* boolean false */
-const mp_result MP_TRUE = -1; /* boolean true */
-const mp_result MP_MEMORY = -2; /* out of memory */
-const mp_result MP_RANGE = -3; /* argument out of range */
-const mp_result MP_UNDEF = -4; /* result undefined */
-const mp_result MP_TRUNC = -5; /* output truncated */
-const mp_result MP_BADARG = -6; /* invalid null argument */
-
-const mp_sign MP_NEG = 1; /* value is strictly negative */
-const mp_sign MP_ZPOS = 0; /* value is non-negative */
-
-static const char *s_unknown_err = "unknown result code";
-static const char *s_error_msg[] = {
- "error code 0",
- "boolean true",
- "out of memory",
- "argument out of range",
- "result undefined",
- "output truncated",
- "invalid null argument",
- NULL
-};
-
-/* }}} */
-
-/* Optional library flags */
-#define MP_CAP_DIGITS 1 /* flag bit to capitalize letter digits */
-
-/* Argument checking macros
- Use CHECK() where a return value is required; NRCHECK() elsewhere */
-#define CHECK(TEST) assert(TEST)
-#define NRCHECK(TEST) assert(TEST)
-
-/* {{{ Logarithm table for computing output sizes */
-
-/* The ith entry of this table gives the value of log_i(2).
-
- An integer value n requires ceil(log_i(n)) digits to be represented
- in base i. Since it is easy to compute lg(n), by counting bits, we
- can compute log_i(n) = lg(n) * log_i(2).
- */
-static const double s_log2[] = {
- 0.000000000, 0.000000000, 1.000000000, 0.630929754, /* 0 1 2 3 */
- 0.500000000, 0.430676558, 0.386852807, 0.356207187, /* 4 5 6 7 */
- 0.333333333, 0.315464877, 0.301029996, 0.289064826, /* 8 9 10 11 */
- 0.278942946, 0.270238154, 0.262649535, 0.255958025, /* 12 13 14 15 */
- 0.250000000, 0.244650542, 0.239812467, 0.235408913, /* 16 17 18 19 */
- 0.231378213, 0.227670249, 0.224243824, 0.221064729, /* 20 21 22 23 */
- 0.218104292, 0.215338279, 0.212746054, 0.210309918, /* 24 25 26 27 */
- 0.208014598, 0.205846832, 0.203795047, 0.201849087, /* 28 29 30 31 */
- 0.200000000, 0.198239863, 0.196561632, 0.194959022, /* 32 33 34 35 */
- 0.193426404, 0.191958720, 0.190551412, 0.189200360, /* 36 37 38 39 */
- 0.187901825, 0.186652411, 0.185449023, 0.184288833, /* 40 41 42 43 */
- 0.183169251, 0.182087900, 0.181042597, 0.180031327, /* 44 45 46 47 */
- 0.179052232, 0.178103594, 0.177183820, 0.176291434, /* 48 49 50 51 */
- 0.175425064, 0.174583430, 0.173765343, 0.172969690, /* 52 53 54 55 */
- 0.172195434, 0.171441601, 0.170707280, 0.169991616, /* 56 57 58 59 */
- 0.169293808, 0.168613099, 0.167948779, 0.167300179, /* 60 61 62 63 */
- 0.166666667
-};
-
-/* }}} */
-/* {{{ Various macros */
-
-/* Return the number of digits needed to represent a static value */
-#define MP_VALUE_DIGITS(V) \
-((sizeof(V)+(sizeof(mp_digit)-1))/sizeof(mp_digit))
-
-/* Round precision P to nearest word boundary */
-#define ROUND_PREC(P) ((mp_size)(2*(((P)+1)/2)))
-
-/* Set array P of S digits to zero */
-#define ZERO(P, S) \
-do{mp_size i__=(S)*sizeof(mp_digit);mp_digit *p__=(P);memset(p__,0,i__);}while(0)
-
-/* Copy S digits from array P to array Q */
-#define COPY(P, Q, S) \
-do{mp_size i__=(S)*sizeof(mp_digit);mp_digit *p__=(P),*q__=(Q);\
-memcpy(q__,p__,i__);}while(0)
-
-/* Reverse N elements of type T in array A */
-#define REV(T, A, N) \
-do{T *u_=(A),*v_=u_+(N)-1;while(u_<v_){T xch=*u_;*u_++=*v_;*v_--=xch;}}while(0)
-
-#if TRACEABLE_CLAMP
-#define CLAMP(Z) s_clamp(Z)
-#else
-#define CLAMP(Z) \
-do{mp_int z_=(Z);mp_size uz_=MP_USED(z_);mp_digit *dz_=MP_DIGITS(z_)+uz_-1;\
-while(uz_ > 1 && (*dz_-- == 0)) --uz_;MP_USED(z_)=uz_;}while(0)
-#endif
-
-#undef MIN
-#undef MAX
-#define MIN(A, B) ((B)<(A)?(B):(A))
-#define MAX(A, B) ((B)>(A)?(B):(A))
-#define SWAP(T, A, B) do{T t_=(A);A=(B);B=t_;}while(0)
-
-#define TEMP(K) (temp + (K))
-#define SETUP(E, C) \
-do{if((res = (E)) != MP_OK) goto CLEANUP; ++(C);}while(0)
-
-#define CMPZ(Z) \
-(((Z)->used==1&&(Z)->digits[0]==0)?0:((Z)->sign==MP_NEG)?-1:1)
-
-#define UMUL(X, Y, Z) \
-do{mp_size ua_=MP_USED(X),ub_=MP_USED(Y);mp_size o_=ua_+ub_;\
-ZERO(MP_DIGITS(Z),o_);\
-(void) s_kmul(MP_DIGITS(X),MP_DIGITS(Y),MP_DIGITS(Z),ua_,ub_);\
-MP_USED(Z)=o_;CLAMP(Z);}while(0)
-
-#define USQR(X, Z) \
-do{mp_size ua_=MP_USED(X),o_=ua_+ua_;ZERO(MP_DIGITS(Z),o_);\
-(void) s_ksqr(MP_DIGITS(X),MP_DIGITS(Z),ua_);MP_USED(Z)=o_;CLAMP(Z);}while(0)
-
-#define UPPER_HALF(W) ((mp_word)((W) >> MP_DIGIT_BIT))
-#define LOWER_HALF(W) ((mp_digit)(W))
-#define HIGH_BIT_SET(W) ((W) >> (MP_WORD_BIT - 1))
-#define ADD_WILL_OVERFLOW(W, V) ((MP_WORD_MAX - (V)) < (W))
-
-/* }}} */
-
-/* Default number of digits allocated to a new mp_int */
-static mp_size default_precision = 64;
-
-/* Minimum number of digits to invoke recursive multiply */
-static mp_size multiply_threshold = 32;
-
-/* Default library configuration flags */
-static mp_word mp_flags = MP_CAP_DIGITS;
-
-/* Allocate a buffer of (at least) num digits, or return
- NULL if that couldn't be done. */
-static mp_digit *s_alloc(mp_size num);
-
-#if TRACEABLE_FREE
-static void s_free(void *ptr);
-#else
-#define s_free(P) px_free(P)
-#endif
-
-/* Insure that z has at least min digits allocated, resizing if
- necessary. Returns true if successful, false if out of memory. */
-static int s_pad(mp_int z, mp_size min);
-
-/* Normalize by removing leading zeroes (except when z = 0) */
-#if TRACEABLE_CLAMP
-static void s_clamp(mp_int z);
-#endif
-
-/* Fill in a "fake" mp_int on the stack with a given value */
-static void s_fake(mp_int z, int value, mp_digit vbuf[]);
-
-/* Compare two runs of digits of given length, returns <0, 0, >0 */
-static int s_cdig(mp_digit *da, mp_digit *db, mp_size len);
-
-/* Pack the unsigned digits of v into array t */
-static int s_vpack(int v, mp_digit t[]);
-
-/* Compare magnitudes of a and b, returns <0, 0, >0 */
-static int s_ucmp(mp_int a, mp_int b);
-
-/* Compare magnitudes of a and v, returns <0, 0, >0 */
-static int s_vcmp(mp_int a, int v);
-
-/* Unsigned magnitude addition; assumes dc is big enough.
- Carry out is returned (no memory allocated). */
-static mp_digit s_uadd(mp_digit *da, mp_digit *db, mp_digit *dc,
- mp_size size_a, mp_size size_b);
-
-/* Unsigned magnitude subtraction. Assumes dc is big enough. */
-static void s_usub(mp_digit *da, mp_digit *db, mp_digit *dc,
- mp_size size_a, mp_size size_b);
-
-/* Unsigned recursive multiplication. Assumes dc is big enough. */
-static int s_kmul(mp_digit *da, mp_digit *db, mp_digit *dc,
- mp_size size_a, mp_size size_b);
-
-/* Unsigned magnitude multiplication. Assumes dc is big enough. */
-static void s_umul(mp_digit *da, mp_digit *db, mp_digit *dc,
- mp_size size_a, mp_size size_b);
-
-/* Unsigned recursive squaring. Assumes dc is big enough. */
-static int s_ksqr(mp_digit *da, mp_digit *dc, mp_size size_a);
-
-/* Unsigned magnitude squaring. Assumes dc is big enough. */
-static void s_usqr(mp_digit *da, mp_digit *dc, mp_size size_a);
-
-/* Single digit addition. Assumes a is big enough. */
-static void s_dadd(mp_int a, mp_digit b);
-
-/* Single digit multiplication. Assumes a is big enough. */
-static void s_dmul(mp_int a, mp_digit b);
-
-/* Single digit multiplication on buffers; assumes dc is big enough. */
-static void s_dbmul(mp_digit *da, mp_digit b, mp_digit *dc,
- mp_size size_a);
-
-/* Single digit division. Replaces a with the quotient,
- returns the remainder. */
-static mp_digit s_ddiv(mp_int a, mp_digit b);
-
-/* Quick division by a power of 2, replaces z (no allocation) */
-static void s_qdiv(mp_int z, mp_size p2);
-
-/* Quick remainder by a power of 2, replaces z (no allocation) */
-static void s_qmod(mp_int z, mp_size p2);
-
-/* Quick multiplication by a power of 2, replaces z.
- Allocates if necessary; returns false in case this fails. */
-static int s_qmul(mp_int z, mp_size p2);
-
-/* Quick subtraction from a power of 2, replaces z.
- Allocates if necessary; returns false in case this fails. */
-static int s_qsub(mp_int z, mp_size p2);
-
-/* Return maximum k such that 2^k divides z. */
-static int s_dp2k(mp_int z);
-
-/* Return k >= 0 such that z = 2^k, or -1 if there is no such k. */
-static int s_isp2(mp_int z);
-
-/* Set z to 2^k. May allocate; returns false in case this fails. */
-static int s_2expt(mp_int z, int k);
-
-/* Normalize a and b for division, returns normalization constant */
-static int s_norm(mp_int a, mp_int b);
-
-/* Compute constant mu for Barrett reduction, given modulus m, result
- replaces z, m is untouched. */
-static mp_result s_brmu(mp_int z, mp_int m);
-
-/* Reduce a modulo m, using Barrett's algorithm. */
-static int s_reduce(mp_int x, mp_int m, mp_int mu, mp_int q1, mp_int q2);
-
-/* Modular exponentiation, using Barrett reduction */
-static mp_result s_embar(mp_int a, mp_int b, mp_int m, mp_int mu, mp_int c);
-
-/* Unsigned magnitude division. Assumes |a| > |b|. Allocates
- temporaries; overwrites a with quotient, b with remainder. */
-static mp_result s_udiv(mp_int a, mp_int b);
-
-/* Compute the number of digits in radix r required to represent the
- given value. Does not account for sign flags, terminators, etc. */
-static int s_outlen(mp_int z, mp_size r);
-
-/* Guess how many digits of precision will be needed to represent a
- radix r value of the specified number of digits. Returns a value
- guaranteed to be no smaller than the actual number required. */
-static mp_size s_inlen(int len, mp_size r);
-
-/* Convert a character to a digit value in radix r, or
- -1 if out of range */
-static int s_ch2val(char c, int r);
-
-/* Convert a digit value to a character */
-static char s_val2ch(int v, int caps);
-
-/* Take 2's complement of a buffer in place */
-static void s_2comp(unsigned char *buf, int len);
-
-/* Convert a value to binary, ignoring sign. On input, *limpos is the
- bound on how many bytes should be written to buf; on output, *limpos
- is set to the number of bytes actually written. */
-static mp_result s_tobin(mp_int z, unsigned char *buf, int *limpos, int pad);
-
-#if 0
-/* Dump a representation of the mp_int to standard output */
-void s_print(char *tag, mp_int z);
-void s_print_buf(char *tag, mp_digit *buf, mp_size num);
-#endif
-
-/* {{{ get_default_precision() */
-
-mp_size
-mp_get_default_precision(void)
-{
- return default_precision;
-}
-
-/* }}} */
-
-/* {{{ mp_set_default_precision(s) */
-
-void
-mp_set_default_precision(mp_size s)
-{
- NRCHECK(s > 0);
-
- default_precision = (mp_size) ROUND_PREC(s);
-}
-
-/* }}} */
-
-/* {{{ mp_get_multiply_threshold() */
-
-mp_size
-mp_get_multiply_threshold(void)
-{
- return multiply_threshold;
-}
-
-/* }}} */
-
-/* {{{ mp_set_multiply_threshold(s) */
-
-void
-mp_set_multiply_threshold(mp_size s)
-{
- multiply_threshold = s;
-}
-
-/* }}} */
-
-/* {{{ mp_int_init(z) */
-
-mp_result
-mp_int_init(mp_int z)
-{
- return mp_int_init_size(z, default_precision);
-}
-
-/* }}} */
-
-/* {{{ mp_int_alloc() */
-
-mp_int
-mp_int_alloc(void)
-{
- mp_int out = px_alloc(sizeof(mpz_t));
-
- assert(out != NULL);
- out->digits = NULL;
- out->used = 0;
- out->alloc = 0;
- out->sign = 0;
-
- return out;
-}
-
-/* }}} */
-
-/* {{{ mp_int_init_size(z, prec) */
-
-mp_result
-mp_int_init_size(mp_int z, mp_size prec)
-{
- CHECK(z != NULL);
-
- prec = (mp_size) ROUND_PREC(prec);
- prec = MAX(prec, default_precision);
-
- if ((MP_DIGITS(z) = s_alloc(prec)) == NULL)
- return MP_MEMORY;
-
- z->digits[0] = 0;
- MP_USED(z) = 1;
- MP_ALLOC(z) = prec;
- MP_SIGN(z) = MP_ZPOS;
-
- return MP_OK;
-}
-
-/* }}} */
-
-/* {{{ mp_int_init_copy(z, old) */
-
-mp_result
-mp_int_init_copy(mp_int z, mp_int old)
-{
- mp_result res;
- mp_size uold,
- target;
-
- CHECK(z != NULL && old != NULL);
-
- uold = MP_USED(old);
- target = MAX(uold, default_precision);
-
- if ((res = mp_int_init_size(z, target)) != MP_OK)
- return res;
-
- MP_USED(z) = uold;
- MP_SIGN(z) = MP_SIGN(old);
- COPY(MP_DIGITS(old), MP_DIGITS(z), uold);
-
- return MP_OK;
-}
-
-/* }}} */
-
-/* {{{ mp_int_init_value(z, value) */
-
-mp_result
-mp_int_init_value(mp_int z, int value)
-{
- mp_result res;
-
- CHECK(z != NULL);
-
- if ((res = mp_int_init(z)) != MP_OK)
- return res;
-
- return mp_int_set_value(z, value);
-}
-
-/* }}} */
-
-/* {{{ mp_int_set_value(z, value) */
-
-mp_result
-mp_int_set_value(mp_int z, int value)
-{
- mp_size ndig;
-
- CHECK(z != NULL);
-
- /* How many digits to copy */
- ndig = (mp_size) MP_VALUE_DIGITS(value);
-
- if (!s_pad(z, ndig))
- return MP_MEMORY;
-
- MP_USED(z) = (mp_size) s_vpack(value, MP_DIGITS(z));
- MP_SIGN(z) = (value < 0) ? MP_NEG : MP_ZPOS;
-
- return MP_OK;
-}
-
-/* }}} */
-
-/* {{{ mp_int_clear(z) */
-
-void
-mp_int_clear(mp_int z)
-{
- if (z == NULL)
- return;
-
- if (MP_DIGITS(z) != NULL)
- {
- s_free(MP_DIGITS(z));
- MP_DIGITS(z) = NULL;
- }
-}
-
-/* }}} */
-
-/* {{{ mp_int_free(z) */
-
-void
-mp_int_free(mp_int z)
-{
- NRCHECK(z != NULL);
-
- if (z->digits != NULL)
- mp_int_clear(z);
-
- px_free(z);
-}
-
-/* }}} */
-
-/* {{{ mp_int_copy(a, c) */
-
-mp_result
-mp_int_copy(mp_int a, mp_int c)
-{
- CHECK(a != NULL && c != NULL);
-
- if (a != c)
- {
- mp_size ua = MP_USED(a);
- mp_digit *da,
- *dc;
-
- if (!s_pad(c, ua))
- return MP_MEMORY;
-
- da = MP_DIGITS(a);
- dc = MP_DIGITS(c);
- COPY(da, dc, ua);
-
- MP_USED(c) = ua;
- MP_SIGN(c) = MP_SIGN(a);
- }
-
- return MP_OK;
-}
-
-/* }}} */
-
-/* {{{ mp_int_swap(a, c) */
-
-void
-mp_int_swap(mp_int a, mp_int c)
-{
- if (a != c)
- {
- mpz_t tmp = *a;
-
- *a = *c;
- *c = tmp;
- }
-}
-
-/* }}} */
-
-/* {{{ mp_int_zero(z) */
-
-void
-mp_int_zero(mp_int z)
-{
- NRCHECK(z != NULL);
-
- z->digits[0] = 0;
- MP_USED(z) = 1;
- MP_SIGN(z) = MP_ZPOS;
-}
-
-/* }}} */
-
-/* {{{ mp_int_abs(a, c) */
-
-mp_result
-mp_int_abs(mp_int a, mp_int c)
-{
- mp_result res;
-
- CHECK(a != NULL && c != NULL);
-
- if ((res = mp_int_copy(a, c)) != MP_OK)
- return res;
-
- MP_SIGN(c) = MP_ZPOS;
- return MP_OK;
-}
-
-/* }}} */
-
-/* {{{ mp_int_neg(a, c) */
-
-mp_result
-mp_int_neg(mp_int a, mp_int c)
-{
- mp_result res;
-
- CHECK(a != NULL && c != NULL);
-
- if ((res = mp_int_copy(a, c)) != MP_OK)
- return res;
-
- if (CMPZ(c) != 0)
- MP_SIGN(c) = 1 - MP_SIGN(a);
-
- return MP_OK;
-}
-
-/* }}} */
-
-/* {{{ mp_int_add(a, b, c) */
-
-mp_result
-mp_int_add(mp_int a, mp_int b, mp_int c)
-{
- mp_size ua,
- ub,
- uc,
- max;
-
- CHECK(a != NULL && b != NULL && c != NULL);
-
- ua = MP_USED(a);
- ub = MP_USED(b);
- uc = MP_USED(c);
- max = MAX(ua, ub);
-
- if (MP_SIGN(a) == MP_SIGN(b))
- {
- /* Same sign -- add magnitudes, preserve sign of addends */
- mp_digit carry;
-
- if (!s_pad(c, max))
- return MP_MEMORY;
-
- carry = s_uadd(MP_DIGITS(a), MP_DIGITS(b), MP_DIGITS(c), ua, ub);
- uc = max;
-
- if (carry)
- {
- if (!s_pad(c, max + 1))
- return MP_MEMORY;
-
- c->digits[max] = carry;
- ++uc;
- }
-
- MP_USED(c) = uc;
- MP_SIGN(c) = MP_SIGN(a);
-
- }
- else
- {
- /* Different signs -- subtract magnitudes, preserve sign of greater */
- mp_int x,
- y;
- int cmp = s_ucmp(a, b); /* magnitude comparision, sign ignored */
-
- /* Set x to max(a, b), y to min(a, b) to simplify later code */
- if (cmp >= 0)
- {
- x = a;
- y = b;
- }
- else
- {
- x = b;
- y = a;
- }
-
- if (!s_pad(c, MP_USED(x)))
- return MP_MEMORY;
-
- /* Subtract smaller from larger */
- s_usub(MP_DIGITS(x), MP_DIGITS(y), MP_DIGITS(c), MP_USED(x), MP_USED(y));
- MP_USED(c) = MP_USED(x);
- CLAMP(c);
-
- /* Give result the sign of the larger */
- MP_SIGN(c) = MP_SIGN(x);
- }
-
- return MP_OK;
-}
-
-/* }}} */
-
-/* {{{ mp_int_add_value(a, value, c) */
-
-mp_result
-mp_int_add_value(mp_int a, int value, mp_int c)
-{
- mpz_t vtmp;
- mp_digit vbuf[MP_VALUE_DIGITS(value)];
-
- s_fake(&vtmp, value, vbuf);
-
- return mp_int_add(a, &vtmp, c);
-}
-
-/* }}} */
-
-/* {{{ mp_int_sub(a, b, c) */
-
-mp_result
-mp_int_sub(mp_int a, mp_int b, mp_int c)
-{
- mp_size ua,
- ub,
- uc,
- max;
-
- CHECK(a != NULL && b != NULL && c != NULL);
-
- ua = MP_USED(a);
- ub = MP_USED(b);
- uc = MP_USED(c);
- max = MAX(ua, ub);
-
- if (MP_SIGN(a) != MP_SIGN(b))
- {
- /* Different signs -- add magnitudes and keep sign of a */
- mp_digit carry;
-
- if (!s_pad(c, max))
- return MP_MEMORY;
-
- carry = s_uadd(MP_DIGITS(a), MP_DIGITS(b), MP_DIGITS(c), ua, ub);
- uc = max;
-
- if (carry)
- {
- if (!s_pad(c, max + 1))
- return MP_MEMORY;
-
- c->digits[max] = carry;
- ++uc;
- }
-
- MP_USED(c) = uc;
- MP_SIGN(c) = MP_SIGN(a);
-
- }
- else
- {
- /* Same signs -- subtract magnitudes */
- mp_int x,
- y;
- mp_sign osign;
- int cmp = s_ucmp(a, b);
-
- if (!s_pad(c, max))
- return MP_MEMORY;
-
- if (cmp >= 0)
- {
- x = a;
- y = b;
- osign = MP_ZPOS;
- }
- else
- {
- x = b;
- y = a;
- osign = MP_NEG;
- }
-
- if (MP_SIGN(a) == MP_NEG && cmp != 0)
- osign = 1 - osign;
-
- s_usub(MP_DIGITS(x), MP_DIGITS(y), MP_DIGITS(c), MP_USED(x), MP_USED(y));
- MP_USED(c) = MP_USED(x);
- CLAMP(c);
-
- MP_SIGN(c) = osign;
- }
-
- return MP_OK;
-}
-
-/* }}} */
-
-/* {{{ mp_int_sub_value(a, value, c) */
-
-mp_result
-mp_int_sub_value(mp_int a, int value, mp_int c)
-{
- mpz_t vtmp;
- mp_digit vbuf[MP_VALUE_DIGITS(value)];
-
- s_fake(&vtmp, value, vbuf);
-
- return mp_int_sub(a, &vtmp, c);
-}
-
-/* }}} */
-
-/* {{{ mp_int_mul(a, b, c) */
-
-mp_result
-mp_int_mul(mp_int a, mp_int b, mp_int c)
-{
- mp_digit *out;
- mp_size osize,
- ua,
- ub,
- p = 0;
- mp_sign osign;
-
- CHECK(a != NULL && b != NULL && c != NULL);
-
- /* If either input is zero, we can shortcut multiplication */
- if (mp_int_compare_zero(a) == 0 || mp_int_compare_zero(b) == 0)
- {
- mp_int_zero(c);
- return MP_OK;
- }
-
- /* Output is positive if inputs have same sign, otherwise negative */
- osign = (MP_SIGN(a) == MP_SIGN(b)) ? MP_ZPOS : MP_NEG;
-
- /*
- * If the output is not equal to any of the inputs, we'll write the
- * results there directly; otherwise, allocate a temporary space.
- */
- ua = MP_USED(a);
- ub = MP_USED(b);
- osize = ua + ub;
-
- if (c == a || c == b)
- {
- p = ROUND_PREC(osize);
- p = MAX(p, default_precision);
-
- if ((out = s_alloc(p)) == NULL)
- return MP_MEMORY;
- }
- else
- {
- if (!s_pad(c, osize))
- return MP_MEMORY;
-
- out = MP_DIGITS(c);
- }
- ZERO(out, osize);
-
- if (!s_kmul(MP_DIGITS(a), MP_DIGITS(b), out, ua, ub))
- return MP_MEMORY;
-
- /*
- * If we allocated a new buffer, get rid of whatever memory c was already
- * using, and fix up its fields to reflect that.
- */
- if (out != MP_DIGITS(c))
- {
- s_free(MP_DIGITS(c));
- MP_DIGITS(c) = out;
- MP_ALLOC(c) = p;
- }
-
- MP_USED(c) = osize; /* might not be true, but we'll fix it ... */
- CLAMP(c); /* ... right here */
- MP_SIGN(c) = osign;
-
- return MP_OK;
-}
-
-/* }}} */
-
-/* {{{ mp_int_mul_value(a, value, c) */
-
-mp_result
-mp_int_mul_value(mp_int a, int value, mp_int c)
-{
- mpz_t vtmp;
- mp_digit vbuf[MP_VALUE_DIGITS(value)];
-
- s_fake(&vtmp, value, vbuf);
-
- return mp_int_mul(a, &vtmp, c);
-}
-
-/* }}} */
-
-/* {{{ mp_int_mul_pow2(a, p2, c) */
-
-mp_result
-mp_int_mul_pow2(mp_int a, int p2, mp_int c)
-{
- mp_result res;
-
- CHECK(a != NULL && c != NULL && p2 >= 0);
-
- if ((res = mp_int_copy(a, c)) != MP_OK)
- return res;
-
- if (s_qmul(c, (mp_size) p2))
- return MP_OK;
- else
- return MP_MEMORY;
-}
-
-/* }}} */
-
-/* {{{ mp_int_sqr(a, c) */
-
-mp_result
-mp_int_sqr(mp_int a, mp_int c)
-{
- mp_digit *out;
- mp_size osize,
- p = 0;
-
- CHECK(a != NULL && c != NULL);
-
- /* Get a temporary buffer big enough to hold the result */
- osize = (mp_size) 2 *MP_USED(a);
-
- if (a == c)
- {
- p = ROUND_PREC(osize);
- p = MAX(p, default_precision);
-
- if ((out = s_alloc(p)) == NULL)
- return MP_MEMORY;
- }
- else
- {
- if (!s_pad(c, osize))
- return MP_MEMORY;
-
- out = MP_DIGITS(c);
- }
- ZERO(out, osize);
-
- s_ksqr(MP_DIGITS(a), out, MP_USED(a));
-
- /*
- * Get rid of whatever memory c was already using, and fix up its fields
- * to reflect the new digit array it's using
- */
- if (out != MP_DIGITS(c))
- {
- s_free(MP_DIGITS(c));
- MP_DIGITS(c) = out;
- MP_ALLOC(c) = p;
- }
-
- MP_USED(c) = osize; /* might not be true, but we'll fix it ... */
- CLAMP(c); /* ... right here */
- MP_SIGN(c) = MP_ZPOS;
-
- return MP_OK;
-}
-
-/* }}} */
-
-/* {{{ mp_int_div(a, b, q, r) */
-
-mp_result
-mp_int_div(mp_int a, mp_int b, mp_int q, mp_int r)
-{
- int cmp,
- last = 0,
- lg;
- mp_result res = MP_OK;
- mpz_t temp[2];
- mp_int qout,
- rout;
- mp_sign sa = MP_SIGN(a),
- sb = MP_SIGN(b);
-
- CHECK(a != NULL && b != NULL && q != r);
-
- if (CMPZ(b) == 0)
- return MP_UNDEF;
- else if ((cmp = s_ucmp(a, b)) < 0)
- {
- /*
- * If |a| < |b|, no division is required: q = 0, r = a
- */
- if (r && (res = mp_int_copy(a, r)) != MP_OK)
- return res;
-
- if (q)
- mp_int_zero(q);
-
- return MP_OK;
- }
- else if (cmp == 0)
- {
- /*
- * If |a| = |b|, no division is required: q = 1 or -1, r = 0
- */
- if (r)
- mp_int_zero(r);
-
- if (q)
- {
- mp_int_zero(q);
- q->digits[0] = 1;
-
- if (sa != sb)
- MP_SIGN(q) = MP_NEG;
- }
-
- return MP_OK;
- }
-
- /*
- * When |a| > |b|, real division is required. We need someplace to store
- * quotient and remainder, but q and r are allowed to be NULL or to
- * overlap with the inputs.
- */
- if ((lg = s_isp2(b)) < 0)
- {
- if (q && b != q && (res = mp_int_copy(a, q)) == MP_OK)
- {
- qout = q;
- }
- else
- {
- qout = TEMP(last);
- SETUP(mp_int_init_copy(TEMP(last), a), last);
- }
-
- if (r && a != r && (res = mp_int_copy(b, r)) == MP_OK)
- {
- rout = r;
- }
- else
- {
- rout = TEMP(last);
- SETUP(mp_int_init_copy(TEMP(last), b), last);
- }
-
- if ((res = s_udiv(qout, rout)) != MP_OK)
- goto CLEANUP;
- }
- else
- {
- if (q && (res = mp_int_copy(a, q)) != MP_OK)
- goto CLEANUP;
- if (r && (res = mp_int_copy(a, r)) != MP_OK)
- goto CLEANUP;
-
- if (q)
- s_qdiv(q, (mp_size) lg);
- qout = q;
- if (r)
- s_qmod(r, (mp_size) lg);
- rout = r;
- }
-
- /* Recompute signs for output */
- if (rout)
- {
- MP_SIGN(rout) = sa;
- if (CMPZ(rout) == 0)
- MP_SIGN(rout) = MP_ZPOS;
- }
- if (qout)
- {
- MP_SIGN(qout) = (sa == sb) ? MP_ZPOS : MP_NEG;
- if (CMPZ(qout) == 0)
- MP_SIGN(qout) = MP_ZPOS;
- }
-
- if (q && (res = mp_int_copy(qout, q)) != MP_OK)
- goto CLEANUP;
- if (r && (res = mp_int_copy(rout, r)) != MP_OK)
- goto CLEANUP;
-
-CLEANUP:
- while (--last >= 0)
- mp_int_clear(TEMP(last));
-
- return res;
-}
-
-/* }}} */
-
-/* {{{ mp_int_mod(a, m, c) */
-
-mp_result
-mp_int_mod(mp_int a, mp_int m, mp_int c)
-{
- mp_result res;
- mpz_t tmp;
- mp_int out;
-
- if (m == c)
- {
- if ((res = mp_int_init(&tmp)) != MP_OK)
- return res;
-
- out = &tmp;
- }
- else
- {
- out = c;
- }
-
- if ((res = mp_int_div(a, m, NULL, out)) != MP_OK)
- goto CLEANUP;
-
- if (CMPZ(out) < 0)
- res = mp_int_add(out, m, c);
- else
- res = mp_int_copy(out, c);
-
-CLEANUP:
- if (out != c)
- mp_int_clear(&tmp);
-
- return res;
-}
-
-/* }}} */
-
-
-/* {{{ mp_int_div_value(a, value, q, r) */
-
-mp_result
-mp_int_div_value(mp_int a, int value, mp_int q, int *r)
-{
- mpz_t vtmp,
- rtmp;
- mp_digit vbuf[MP_VALUE_DIGITS(value)];
- mp_result res;
-
- if ((res = mp_int_init(&rtmp)) != MP_OK)
- return res;
- s_fake(&vtmp, value, vbuf);
-
- if ((res = mp_int_div(a, &vtmp, q, &rtmp)) != MP_OK)
- goto CLEANUP;
-
- if (r)
- (void) mp_int_to_int(&rtmp, r); /* can't fail */
-
-CLEANUP:
- mp_int_clear(&rtmp);
- return res;
-}
-
-/* }}} */
-
-/* {{{ mp_int_div_pow2(a, p2, q, r) */
-
-mp_result
-mp_int_div_pow2(mp_int a, int p2, mp_int q, mp_int r)
-{
- mp_result res = MP_OK;
-
- CHECK(a != NULL && p2 >= 0 && q != r);
-
- if (q != NULL && (res = mp_int_copy(a, q)) == MP_OK)
- s_qdiv(q, (mp_size) p2);
-
- if (res == MP_OK && r != NULL && (res = mp_int_copy(a, r)) == MP_OK)
- s_qmod(r, (mp_size) p2);
-
- return res;
-}
-
-/* }}} */
-
-/* {{{ mp_int_expt(a, b, c) */
-
-mp_result
-mp_int_expt(mp_int a, int b, mp_int c)
-{
- mpz_t t;
- mp_result res;
- unsigned int v = abs(b);
-
- CHECK(b >= 0 && c != NULL);
-
- if ((res = mp_int_init_copy(&t, a)) != MP_OK)
- return res;
-
- (void) mp_int_set_value(c, 1);
- while (v != 0)
- {
- if (v & 1)
- {
- if ((res = mp_int_mul(c, &t, c)) != MP_OK)
- goto CLEANUP;
- }
-
- v >>= 1;
- if (v == 0)
- break;
-
- if ((res = mp_int_sqr(&t, &t)) != MP_OK)
- goto CLEANUP;
- }
-
-CLEANUP:
- mp_int_clear(&t);
- return res;
-}
-
-/* }}} */
-
-/* {{{ mp_int_expt_value(a, b, c) */
-
-mp_result
-mp_int_expt_value(int a, int b, mp_int c)
-{
- mpz_t t;
- mp_result res;
- unsigned int v = abs(b);
-
- CHECK(b >= 0 && c != NULL);
-
- if ((res = mp_int_init_value(&t, a)) != MP_OK)
- return res;
-
- (void) mp_int_set_value(c, 1);
- while (v != 0)
- {
- if (v & 1)
- {
- if ((res = mp_int_mul(c, &t, c)) != MP_OK)
- goto CLEANUP;
- }
-
- v >>= 1;
- if (v == 0)
- break;
-
- if ((res = mp_int_sqr(&t, &t)) != MP_OK)
- goto CLEANUP;
- }
-
-CLEANUP:
- mp_int_clear(&t);
- return res;
-}
-
-/* }}} */
-
-/* {{{ mp_int_compare(a, b) */
-
-int
-mp_int_compare(mp_int a, mp_int b)
-{
- mp_sign sa;
-
- CHECK(a != NULL && b != NULL);
-
- sa = MP_SIGN(a);
- if (sa == MP_SIGN(b))
- {
- int cmp = s_ucmp(a, b);
-
- /*
- * If they're both zero or positive, the normal comparison applies; if
- * both negative, the sense is reversed.
- */
- if (sa == MP_ZPOS)
- return cmp;
- else
- return -cmp;
-
- }
- else
- {
- if (sa == MP_ZPOS)
- return 1;
- else
- return -1;
- }
-}
-
-/* }}} */
-
-/* {{{ mp_int_compare_unsigned(a, b) */
-
-int
-mp_int_compare_unsigned(mp_int a, mp_int b)
-{
- NRCHECK(a != NULL && b != NULL);
-
- return s_ucmp(a, b);
-}
-
-/* }}} */
-
-/* {{{ mp_int_compare_zero(z) */
-
-int
-mp_int_compare_zero(mp_int z)
-{
- NRCHECK(z != NULL);
-
- if (MP_USED(z) == 1 && z->digits[0] == 0)
- return 0;
- else if (MP_SIGN(z) == MP_ZPOS)
- return 1;
- else
- return -1;
-}
-
-/* }}} */
-
-/* {{{ mp_int_compare_value(z, value) */
-
-int
-mp_int_compare_value(mp_int z, int value)
-{
- mp_sign vsign = (value < 0) ? MP_NEG : MP_ZPOS;
- int cmp;
-
- CHECK(z != NULL);
-
- if (vsign == MP_SIGN(z))
- {
- cmp = s_vcmp(z, value);
-
- if (vsign == MP_ZPOS)
- return cmp;
- else
- return -cmp;
- }
- else
- {
- if (value < 0)
- return 1;
- else
- return -1;
- }
-}
-
-/* }}} */
-
-/* {{{ mp_int_exptmod(a, b, m, c) */
-
-mp_result
-mp_int_exptmod(mp_int a, mp_int b, mp_int m, mp_int c)
-{
- mp_result res;
- mp_size um;
- mpz_t temp[3];
- mp_int s;
- int last = 0;
-
- CHECK(a != NULL && b != NULL && c != NULL && m != NULL);
-
- /* Zero moduli and negative exponents are not considered. */
- if (CMPZ(m) == 0)
- return MP_UNDEF;
- if (CMPZ(b) < 0)
- return MP_RANGE;
-
- um = MP_USED(m);
- SETUP(mp_int_init_size(TEMP(0), 2 * um), last);
- SETUP(mp_int_init_size(TEMP(1), 2 * um), last);
-
- if (c == b || c == m)
- {
- SETUP(mp_int_init_size(TEMP(2), 2 * um), last);
- s = TEMP(2);
- }
- else
- {
- s = c;
- }
-
- if ((res = mp_int_mod(a, m, TEMP(0))) != MP_OK)
- goto CLEANUP;
-
- if ((res = s_brmu(TEMP(1), m)) != MP_OK)
- goto CLEANUP;
-
- if ((res = s_embar(TEMP(0), b, m, TEMP(1), s)) != MP_OK)
- goto CLEANUP;
-
- res = mp_int_copy(s, c);
-
-CLEANUP:
- while (--last >= 0)
- mp_int_clear(TEMP(last));
-
- return res;
-}
-
-/* }}} */
-
-/* {{{ mp_int_exptmod_evalue(a, value, m, c) */
-
-mp_result
-mp_int_exptmod_evalue(mp_int a, int value, mp_int m, mp_int c)
-{
- mpz_t vtmp;
- mp_digit vbuf[MP_VALUE_DIGITS(value)];
-
- s_fake(&vtmp, value, vbuf);
-
- return mp_int_exptmod(a, &vtmp, m, c);
-}
-
-/* }}} */
-
-/* {{{ mp_int_exptmod_bvalue(v, b, m, c) */
-
-mp_result
-mp_int_exptmod_bvalue(int value, mp_int b,
- mp_int m, mp_int c)
-{
- mpz_t vtmp;
- mp_digit vbuf[MP_VALUE_DIGITS(value)];
-
- s_fake(&vtmp, value, vbuf);
-
- return mp_int_exptmod(&vtmp, b, m, c);
-}
-
-/* }}} */
-
-/* {{{ mp_int_exptmod_known(a, b, m, mu, c) */
-
-mp_result
-mp_int_exptmod_known(mp_int a, mp_int b, mp_int m, mp_int mu, mp_int c)
-{
- mp_result res;
- mp_size um;
- mpz_t temp[2];
- mp_int s;
- int last = 0;
-
- CHECK(a && b && m && c);
-
- /* Zero moduli and negative exponents are not considered. */
- if (CMPZ(m) == 0)
- return MP_UNDEF;
- if (CMPZ(b) < 0)
- return MP_RANGE;
-
- um = MP_USED(m);
- SETUP(mp_int_init_size(TEMP(0), 2 * um), last);
-
- if (c == b || c == m)
- {
- SETUP(mp_int_init_size(TEMP(1), 2 * um), last);
- s = TEMP(1);
- }
- else
- {
- s = c;
- }
-
- if ((res = mp_int_mod(a, m, TEMP(0))) != MP_OK)
- goto CLEANUP;
-
- if ((res = s_embar(TEMP(0), b, m, mu, s)) != MP_OK)
- goto CLEANUP;
-
- res = mp_int_copy(s, c);
-
-CLEANUP:
- while (--last >= 0)
- mp_int_clear(TEMP(last));
-
- return res;
-}
-
-/* }}} */
-
-/* {{{ mp_int_redux_const(m, c) */
-
-mp_result
-mp_int_redux_const(mp_int m, mp_int c)
-{
- CHECK(m != NULL && c != NULL && m != c);
-
- return s_brmu(c, m);
-}
-
-/* }}} */
-
-/* {{{ mp_int_invmod(a, m, c) */
-
-mp_result
-mp_int_invmod(mp_int a, mp_int m, mp_int c)
-{
- mp_result res;
- mp_sign sa;
- int last = 0;
- mpz_t temp[2];
-
- CHECK(a != NULL && m != NULL && c != NULL);
-
- if (CMPZ(a) == 0 || CMPZ(m) <= 0)
- return MP_RANGE;
-
- sa = MP_SIGN(a); /* need this for the result later */
-
- for (last = 0; last < 2; ++last)
- if ((res = mp_int_init(TEMP(last))) != MP_OK)
- goto CLEANUP;
-
- if ((res = mp_int_egcd(a, m, TEMP(0), TEMP(1), NULL)) != MP_OK)
- goto CLEANUP;
-
- if (mp_int_compare_value(TEMP(0), 1) != 0)
- {
- res = MP_UNDEF;
- goto CLEANUP;
- }
-
- /* It is first necessary to constrain the value to the proper range */
- if ((res = mp_int_mod(TEMP(1), m, TEMP(1))) != MP_OK)
- goto CLEANUP;
-
- /*
- * Now, if 'a' was originally negative, the value we have is actually the
- * magnitude of the negative representative; to get the positive value we
- * have to subtract from the modulus. Otherwise, the value is okay as it
- * stands.
- */
- if (sa == MP_NEG)
- res = mp_int_sub(m, TEMP(1), c);
- else
- res = mp_int_copy(TEMP(1), c);
-
-CLEANUP:
- while (--last >= 0)
- mp_int_clear(TEMP(last));
-
- return res;
-}
-
-/* }}} */
-
-/* {{{ mp_int_gcd(a, b, c) */
-
-/* Binary GCD algorithm due to Josef Stein, 1961 */
-mp_result
-mp_int_gcd(mp_int a, mp_int b, mp_int c)
-{
- int ca,
- cb,
- k = 0;
- mpz_t u,
- v,
- t;
- mp_result res;
-
- CHECK(a != NULL && b != NULL && c != NULL);
-
- ca = CMPZ(a);
- cb = CMPZ(b);
- if (ca == 0 && cb == 0)
- return MP_UNDEF;
- else if (ca == 0)
- return mp_int_abs(b, c);
- else if (cb == 0)
- return mp_int_abs(a, c);
-
- if ((res = mp_int_init(&t)) != MP_OK)
- return res;
- if ((res = mp_int_init_copy(&u, a)) != MP_OK)
- goto U;
- if ((res = mp_int_init_copy(&v, b)) != MP_OK)
- goto V;
-
- MP_SIGN(&u) = MP_ZPOS;
- MP_SIGN(&v) = MP_ZPOS;
-
- { /* Divide out common factors of 2 from u and v */
- int div2_u = s_dp2k(&u),
- div2_v = s_dp2k(&v);
-
- k = MIN(div2_u, div2_v);
- s_qdiv(&u, (mp_size) k);
- s_qdiv(&v, (mp_size) k);
- }
-
- if (mp_int_is_odd(&u))
- {
- if ((res = mp_int_neg(&v, &t)) != MP_OK)
- goto CLEANUP;
- }
- else
- {
- if ((res = mp_int_copy(&u, &t)) != MP_OK)
- goto CLEANUP;
- }
-
- for (;;)
- {
- s_qdiv(&t, s_dp2k(&t));
-
- if (CMPZ(&t) > 0)
- {
- if ((res = mp_int_copy(&t, &u)) != MP_OK)
- goto CLEANUP;
- }
- else
- {
- if ((res = mp_int_neg(&t, &v)) != MP_OK)
- goto CLEANUP;
- }
-
- if ((res = mp_int_sub(&u, &v, &t)) != MP_OK)
- goto CLEANUP;
-
- if (CMPZ(&t) == 0)
- break;
- }
-
- if ((res = mp_int_abs(&u, c)) != MP_OK)
- goto CLEANUP;
- if (!s_qmul(c, (mp_size) k))
- res = MP_MEMORY;
-
-CLEANUP:
- mp_int_clear(&v);
-V: mp_int_clear(&u);
-U: mp_int_clear(&t);
-
- return res;
-}
-
-/* }}} */
-
-/* {{{ mp_int_egcd(a, b, c, x, y) */
-
-/* This is the binary GCD algorithm again, but this time we keep track
- of the elementary matrix operations as we go, so we can get values
- x and y satisfying c = ax + by.
- */
-mp_result
-mp_int_egcd(mp_int a, mp_int b, mp_int c,
- mp_int x, mp_int y)
-{
- int k,
- last = 0,
- ca,
- cb;
- mpz_t temp[8];
- mp_result res;
-
- CHECK(a != NULL && b != NULL && c != NULL &&
- (x != NULL || y != NULL));
-
- ca = CMPZ(a);
- cb = CMPZ(b);
- if (ca == 0 && cb == 0)
- return MP_UNDEF;
- else if (ca == 0)
- {
- if ((res = mp_int_abs(b, c)) != MP_OK)
- return res;
- mp_int_zero(x);
- (void) mp_int_set_value(y, 1);
- return MP_OK;
- }
- else if (cb == 0)
- {
- if ((res = mp_int_abs(a, c)) != MP_OK)
- return res;
- (void) mp_int_set_value(x, 1);
- mp_int_zero(y);
- return MP_OK;
- }
-
- /*
- * Initialize temporaries: A:0, B:1, C:2, D:3, u:4, v:5, ou:6, ov:7
- */
- for (last = 0; last < 4; ++last)
- {
- if ((res = mp_int_init(TEMP(last))) != MP_OK)
- goto CLEANUP;
- }
- TEMP(0)->digits[0] = 1;
- TEMP(3)->digits[0] = 1;
-
- SETUP(mp_int_init_copy(TEMP(4), a), last);
- SETUP(mp_int_init_copy(TEMP(5), b), last);
-
- /* We will work with absolute values here */
- MP_SIGN(TEMP(4)) = MP_ZPOS;
- MP_SIGN(TEMP(5)) = MP_ZPOS;
-
- { /* Divide out common factors of 2 from u and v */
- int div2_u = s_dp2k(TEMP(4)),
- div2_v = s_dp2k(TEMP(5));
-
- k = MIN(div2_u, div2_v);
- s_qdiv(TEMP(4), k);
- s_qdiv(TEMP(5), k);
- }
-
- SETUP(mp_int_init_copy(TEMP(6), TEMP(4)), last);
- SETUP(mp_int_init_copy(TEMP(7), TEMP(5)), last);
-
- for (;;)
- {
- while (mp_int_is_even(TEMP(4)))
- {
- s_qdiv(TEMP(4), 1);
-
- if (mp_int_is_odd(TEMP(0)) || mp_int_is_odd(TEMP(1)))
- {
- if ((res = mp_int_add(TEMP(0), TEMP(7), TEMP(0))) != MP_OK)
- goto CLEANUP;
- if ((res = mp_int_sub(TEMP(1), TEMP(6), TEMP(1))) != MP_OK)
- goto CLEANUP;
- }
-
- s_qdiv(TEMP(0), 1);
- s_qdiv(TEMP(1), 1);
- }
-
- while (mp_int_is_even(TEMP(5)))
- {
- s_qdiv(TEMP(5), 1);
-
- if (mp_int_is_odd(TEMP(2)) || mp_int_is_odd(TEMP(3)))
- {
- if ((res = mp_int_add(TEMP(2), TEMP(7), TEMP(2))) != MP_OK)
- goto CLEANUP;
- if ((res = mp_int_sub(TEMP(3), TEMP(6), TEMP(3))) != MP_OK)
- goto CLEANUP;
- }
-
- s_qdiv(TEMP(2), 1);
- s_qdiv(TEMP(3), 1);
- }
-
- if (mp_int_compare(TEMP(4), TEMP(5)) >= 0)
- {
- if ((res = mp_int_sub(TEMP(4), TEMP(5), TEMP(4))) != MP_OK)
- goto CLEANUP;
- if ((res = mp_int_sub(TEMP(0), TEMP(2), TEMP(0))) != MP_OK)
- goto CLEANUP;
- if ((res = mp_int_sub(TEMP(1), TEMP(3), TEMP(1))) != MP_OK)
- goto CLEANUP;
- }
- else
- {
- if ((res = mp_int_sub(TEMP(5), TEMP(4), TEMP(5))) != MP_OK)
- goto CLEANUP;
- if ((res = mp_int_sub(TEMP(2), TEMP(0), TEMP(2))) != MP_OK)
- goto CLEANUP;
- if ((res = mp_int_sub(TEMP(3), TEMP(1), TEMP(3))) != MP_OK)
- goto CLEANUP;
- }
-
- if (CMPZ(TEMP(4)) == 0)
- {
- if (x && (res = mp_int_copy(TEMP(2), x)) != MP_OK)
- goto CLEANUP;
- if (y && (res = mp_int_copy(TEMP(3), y)) != MP_OK)
- goto CLEANUP;
- if (c)
- {
- if (!s_qmul(TEMP(5), k))
- {
- res = MP_MEMORY;
- goto CLEANUP;
- }
-
- res = mp_int_copy(TEMP(5), c);
- }
-
- break;
- }
- }
-
-CLEANUP:
- while (--last >= 0)
- mp_int_clear(TEMP(last));
-
- return res;
-}
-
-/* }}} */
-
-/* {{{ mp_int_divisible_value(a, v) */
-
-int
-mp_int_divisible_value(mp_int a, int v)
-{
- int rem = 0;
-
- if (mp_int_div_value(a, v, NULL, &rem) != MP_OK)
- return 0;
-
- return rem == 0;
-}
-
-/* }}} */
-
-/* {{{ mp_int_is_pow2(z) */
-
-int
-mp_int_is_pow2(mp_int z)
-{
- CHECK(z != NULL);
-
- return s_isp2(z);
-}
-
-/* }}} */
-
-/* {{{ mp_int_sqrt(a, c) */
-
-mp_result
-mp_int_sqrt(mp_int a, mp_int c)
-{
- mp_result res = MP_OK;
- mpz_t temp[2];
- int last = 0;
-
- CHECK(a != NULL && c != NULL);
-
- /* The square root of a negative value does not exist in the integers. */
- if (MP_SIGN(a) == MP_NEG)
- return MP_UNDEF;
-
- SETUP(mp_int_init_copy(TEMP(last), a), last);
- SETUP(mp_int_init(TEMP(last)), last);
-
- for (;;)
- {
- if ((res = mp_int_sqr(TEMP(0), TEMP(1))) != MP_OK)
- goto CLEANUP;
-
- if (mp_int_compare_unsigned(a, TEMP(1)) == 0)
- break;
-
- if ((res = mp_int_copy(a, TEMP(1))) != MP_OK)
- goto CLEANUP;
- if ((res = mp_int_div(TEMP(1), TEMP(0), TEMP(1), NULL)) != MP_OK)
- goto CLEANUP;
- if ((res = mp_int_add(TEMP(0), TEMP(1), TEMP(1))) != MP_OK)
- goto CLEANUP;
- if ((res = mp_int_div_pow2(TEMP(1), 1, TEMP(1), NULL)) != MP_OK)
- goto CLEANUP;
-
- if (mp_int_compare_unsigned(TEMP(0), TEMP(1)) == 0)
- break;
- if ((res = mp_int_sub_value(TEMP(0), 1, TEMP(0))) != MP_OK)
- goto CLEANUP;
- if (mp_int_compare_unsigned(TEMP(0), TEMP(1)) == 0)
- break;
-
- if ((res = mp_int_copy(TEMP(1), TEMP(0))) != MP_OK)
- goto CLEANUP;
- }
-
- res = mp_int_copy(TEMP(0), c);
-
-CLEANUP:
- while (--last >= 0)
- mp_int_clear(TEMP(last));
-
- return res;
-}
-
-/* }}} */
-
-/* {{{ mp_int_to_int(z, out) */
-
-mp_result
-mp_int_to_int(mp_int z, int *out)
-{
- unsigned int uv = 0;
- mp_size uz;
- mp_digit *dz;
- mp_sign sz;
-
- CHECK(z != NULL);
-
- /* Make sure the value is representable as an int */
- sz = MP_SIGN(z);
- if ((sz == MP_ZPOS && mp_int_compare_value(z, INT_MAX) > 0) ||
- mp_int_compare_value(z, INT_MIN) < 0)
- return MP_RANGE;
-
- uz = MP_USED(z);
- dz = MP_DIGITS(z) + uz - 1;
-
- while (uz > 0)
- {
- uv <<= MP_DIGIT_BIT / 2;
- uv = (uv << (MP_DIGIT_BIT / 2)) | *dz--;
- --uz;
- }
-
- if (out)
- *out = (sz == MP_NEG) ? -(int) uv : (int) uv;
-
- return MP_OK;
-}
-
-/* }}} */
-
-/* {{{ mp_int_to_string(z, radix, str, limit) */
-
-mp_result
-mp_int_to_string(mp_int z, mp_size radix,
- char *str, int limit)
-{
- mp_result res;
- int cmp = 0;
-
- CHECK(z != NULL && str != NULL && limit >= 2);
-
- if (radix < MP_MIN_RADIX || radix > MP_MAX_RADIX)
- return MP_RANGE;
-
- if (CMPZ(z) == 0)
- {
- *str++ = s_val2ch(0, mp_flags & MP_CAP_DIGITS);
- }
- else
- {
- mpz_t tmp;
- char *h,
- *t;
-
- if ((res = mp_int_init_copy(&tmp, z)) != MP_OK)
- return res;
-
- if (MP_SIGN(z) == MP_NEG)
- {
- *str++ = '-';
- --limit;
- }
- h = str;
-
- /* Generate digits in reverse order until finished or limit reached */
- for ( /* */ ; limit > 0; --limit)
- {
- mp_digit d;
-
- if ((cmp = CMPZ(&tmp)) == 0)
- break;
-
- d = s_ddiv(&tmp, (mp_digit) radix);
- *str++ = s_val2ch(d, mp_flags & MP_CAP_DIGITS);
- }
- t = str - 1;
-
- /* Put digits back in correct output order */
- while (h < t)
- {
- char tc = *h;
-
- *h++ = *t;
- *t-- = tc;
- }
-
- mp_int_clear(&tmp);
- }
-
- *str = '\0';
- if (cmp == 0)
- return MP_OK;
- else
- return MP_TRUNC;
-}
-
-/* }}} */
-
-/* {{{ mp_int_string_len(z, radix) */
-
-mp_result
-mp_int_string_len(mp_int z, mp_size radix)
-{
- int len;
-
- CHECK(z != NULL);
-
- if (radix < MP_MIN_RADIX || radix > MP_MAX_RADIX)
- return MP_RANGE;
-
- len = s_outlen(z, radix) + 1; /* for terminator */
-
- /* Allow for sign marker on negatives */
- if (MP_SIGN(z) == MP_NEG)
- len += 1;
-
- return len;
-}
-
-/* }}} */
-
-/* {{{ mp_int_read_string(z, radix, *str) */
-
-/* Read zero-terminated string into z */
-mp_result
-mp_int_read_string(mp_int z, mp_size radix, const char *str)
-{
- return mp_int_read_cstring(z, radix, str, NULL);
-
-}
-
-/* }}} */
-
-/* {{{ mp_int_read_cstring(z, radix, *str, **end) */
-
-mp_result
-mp_int_read_cstring(mp_int z, mp_size radix, const char *str, char **end)
-{
- int ch;
-
- CHECK(z != NULL && str != NULL);
-
- if (radix < MP_MIN_RADIX || radix > MP_MAX_RADIX)
- return MP_RANGE;
-
- /* Skip leading whitespace */
- while (isspace((unsigned char) *str))
- ++str;
-
- /* Handle leading sign tag (+/-, positive default) */
- switch (*str)
- {
- case '-':
- MP_SIGN(z) = MP_NEG;
- ++str;
- break;
- case '+':
- ++str; /* fallthrough */
- default:
- MP_SIGN(z) = MP_ZPOS;
- break;
- }
-
- /* Skip leading zeroes */
- while ((ch = s_ch2val(*str, radix)) == 0)
- ++str;
-
- /* Make sure there is enough space for the value */
- if (!s_pad(z, s_inlen(strlen(str), radix)))
- return MP_MEMORY;
-
- MP_USED(z) = 1;
- z->digits[0] = 0;
-
- while (*str != '\0' && ((ch = s_ch2val(*str, radix)) >= 0))
- {
- s_dmul(z, (mp_digit) radix);
- s_dadd(z, (mp_digit) ch);
- ++str;
- }
-
- CLAMP(z);
-
- /* Override sign for zero, even if negative specified. */
- if (CMPZ(z) == 0)
- MP_SIGN(z) = MP_ZPOS;
-
- if (end != NULL)
- *end = (char *) str;
-
- /*
- * Return a truncation error if the string has unprocessed characters
- * remaining, so the caller can tell if the whole string was done
- */
- if (*str != '\0')
- return MP_TRUNC;
- else
- return MP_OK;
-}
-
-/* }}} */
-
-/* {{{ mp_int_count_bits(z) */
-
-mp_result
-mp_int_count_bits(mp_int z)
-{
- mp_size nbits = 0,
- uz;
- mp_digit d;
-
- CHECK(z != NULL);
-
- uz = MP_USED(z);
- if (uz == 1 && z->digits[0] == 0)
- return 1;
-
- --uz;
- nbits = uz * MP_DIGIT_BIT;
- d = z->digits[uz];
-
- while (d != 0)
- {
- d >>= 1;
- ++nbits;
- }
-
- return nbits;
-}
-
-/* }}} */
-
-/* {{{ mp_int_to_binary(z, buf, limit) */
-
-mp_result
-mp_int_to_binary(mp_int z, unsigned char *buf, int limit)
-{
- static const int PAD_FOR_2C = 1;
-
- mp_result res;
- int limpos = limit;
-
- CHECK(z != NULL && buf != NULL);
-
- res = s_tobin(z, buf, &limpos, PAD_FOR_2C);
-
- if (MP_SIGN(z) == MP_NEG)
- s_2comp(buf, limpos);
-
- return res;
-}
-
-/* }}} */
-
-/* {{{ mp_int_read_binary(z, buf, len) */
-
-mp_result
-mp_int_read_binary(mp_int z, unsigned char *buf, int len)
-{
- mp_size need,
- i;
- unsigned char *tmp;
- mp_digit *dz;
-
- CHECK(z != NULL && buf != NULL && len > 0);
-
- /* Figure out how many digits are needed to represent this value */
- need = ((len * CHAR_BIT) + (MP_DIGIT_BIT - 1)) / MP_DIGIT_BIT;
- if (!s_pad(z, need))
- return MP_MEMORY;
-
- mp_int_zero(z);
-
- /*
- * If the high-order bit is set, take the 2's complement before reading
- * the value (it will be restored afterward)
- */
- if (buf[0] >> (CHAR_BIT - 1))
- {
- MP_SIGN(z) = MP_NEG;
- s_2comp(buf, len);
- }
-
- dz = MP_DIGITS(z);
- for (tmp = buf, i = len; i > 0; --i, ++tmp)
- {
- s_qmul(z, (mp_size) CHAR_BIT);
- *dz |= *tmp;
- }
-
- /* Restore 2's complement if we took it before */
- if (MP_SIGN(z) == MP_NEG)
- s_2comp(buf, len);
-
- return MP_OK;
-}
-
-/* }}} */
-
-/* {{{ mp_int_binary_len(z) */
-
-mp_result
-mp_int_binary_len(mp_int z)
-{
- mp_result res = mp_int_count_bits(z);
- int bytes = mp_int_unsigned_len(z);
-
- if (res <= 0)
- return res;
-
- bytes = (res + (CHAR_BIT - 1)) / CHAR_BIT;
-
- /*
- * If the highest-order bit falls exactly on a byte boundary, we need to
- * pad with an extra byte so that the sign will be read correctly when
- * reading it back in.
- */
- if (bytes * CHAR_BIT == res)
- ++bytes;
-
- return bytes;
-}
-
-/* }}} */
-
-/* {{{ mp_int_to_unsigned(z, buf, limit) */
-
-mp_result
-mp_int_to_unsigned(mp_int z, unsigned char *buf, int limit)
-{
- static const int NO_PADDING = 0;
-
- CHECK(z != NULL && buf != NULL);
-
- return s_tobin(z, buf, &limit, NO_PADDING);
-}
-
-/* }}} */
-
-/* {{{ mp_int_read_unsigned(z, buf, len) */
-
-mp_result
-mp_int_read_unsigned(mp_int z, unsigned char *buf, int len)
-{
- mp_size need,
- i;
- unsigned char *tmp;
- mp_digit *dz;
-
- CHECK(z != NULL && buf != NULL && len > 0);
-
- /* Figure out how many digits are needed to represent this value */
- need = ((len * CHAR_BIT) + (MP_DIGIT_BIT - 1)) / MP_DIGIT_BIT;
- if (!s_pad(z, need))
- return MP_MEMORY;
-
- mp_int_zero(z);
-
- dz = MP_DIGITS(z);
- for (tmp = buf, i = len; i > 0; --i, ++tmp)
- {
- (void) s_qmul(z, CHAR_BIT);
- *dz |= *tmp;
- }
-
- return MP_OK;
-}
-
-/* }}} */
-
-/* {{{ mp_int_unsigned_len(z) */
-
-mp_result
-mp_int_unsigned_len(mp_int z)
-{
- mp_result res = mp_int_count_bits(z);
- int bytes;
-
- if (res <= 0)
- return res;
-
- bytes = (res + (CHAR_BIT - 1)) / CHAR_BIT;
-
- return bytes;
-}
-
-/* }}} */
-
-/* {{{ mp_error_string(res) */
-
-const char *
-mp_error_string(mp_result res)
-{
- int ix;
-
- if (res > 0)
- return s_unknown_err;
-
- res = -res;
- for (ix = 0; ix < res && s_error_msg[ix] != NULL; ++ix)
- ;
-
- if (s_error_msg[ix] != NULL)
- return s_error_msg[ix];
- else
- return s_unknown_err;
-}
-
-/* }}} */
-
-/*------------------------------------------------------------------------*/
-/* Private functions for internal use. These make assumptions. */
-
-/* {{{ s_alloc(num) */
-
-static mp_digit *
-s_alloc(mp_size num)
-{
- mp_digit *out = px_alloc(num * sizeof(mp_digit));
-
- assert(out != NULL); /* for debugging */
-
- return out;
-}
-
-/* }}} */
-
-/* {{{ s_realloc(old, num) */
-
-static mp_digit *
-s_realloc(mp_digit *old, mp_size num)
-{
- mp_digit *new = px_realloc(old, num * sizeof(mp_digit));
-
- assert(new != NULL); /* for debugging */
-
- return new;
-}
-
-/* }}} */
-
-/* {{{ s_free(ptr) */
-
-#if TRACEABLE_FREE
-static void
-s_free(void *ptr)
-{
- px_free(ptr);
-}
-#endif
-
-/* }}} */
-
-/* {{{ s_pad(z, min) */
-
-static int
-s_pad(mp_int z, mp_size min)
-{
- if (MP_ALLOC(z) < min)
- {
- mp_size nsize = ROUND_PREC(min);
- mp_digit *tmp = s_realloc(MP_DIGITS(z), nsize);
-
- if (tmp == NULL)
- return 0;
-
- MP_DIGITS(z) = tmp;
- MP_ALLOC(z) = nsize;
- }
-
- return 1;
-}
-
-/* }}} */
-
-/* {{{ s_clamp(z) */
-
-#if TRACEABLE_CLAMP
-static void
-s_clamp(mp_int z)
-{
- mp_size uz = MP_USED(z);
- mp_digit *zd = MP_DIGITS(z) + uz - 1;
-
- while (uz > 1 && (*zd-- == 0))
- --uz;
-
- MP_USED(z) = uz;
-}
-#endif
-
-/* }}} */
-
-/* {{{ s_fake(z, value, vbuf) */
-
-static void
-s_fake(mp_int z, int value, mp_digit vbuf[])
-{
- mp_size uv = (mp_size) s_vpack(value, vbuf);
-
- z->used = uv;
- z->alloc = MP_VALUE_DIGITS(value);
- z->sign = (value < 0) ? MP_NEG : MP_ZPOS;
- z->digits = vbuf;
-}
-
-/* }}} */
-
-/* {{{ s_cdig(da, db, len) */
-
-static int
-s_cdig(mp_digit *da, mp_digit *db, mp_size len)
-{
- mp_digit *dat = da + len - 1,
- *dbt = db + len - 1;
-
- for ( /* */ ; len != 0; --len, --dat, --dbt)
- {
- if (*dat > *dbt)
- return 1;
- else if (*dat < *dbt)
- return -1;
- }
-
- return 0;
-}
-
-/* }}} */
-
-/* {{{ s_vpack(v, t[]) */
-
-static int
-s_vpack(int v, mp_digit t[])
-{
- unsigned int uv = (unsigned int) ((v < 0) ? -v : v);
- int ndig = 0;
-
- if (uv == 0)
- t[ndig++] = 0;
- else
- {
- while (uv != 0)
- {
- t[ndig++] = (mp_digit) uv;
- uv >>= MP_DIGIT_BIT / 2;
- uv >>= MP_DIGIT_BIT / 2;
- }
- }
-
- return ndig;
-}
-
-/* }}} */
-
-/* {{{ s_ucmp(a, b) */
-
-static int
-s_ucmp(mp_int a, mp_int b)
-{
- mp_size ua = MP_USED(a),
- ub = MP_USED(b);
-
- if (ua > ub)
- return 1;
- else if (ub > ua)
- return -1;
- else
- return s_cdig(MP_DIGITS(a), MP_DIGITS(b), ua);
-}
-
-/* }}} */
-
-/* {{{ s_vcmp(a, v) */
-
-static int
-s_vcmp(mp_int a, int v)
-{
- mp_digit vdig[MP_VALUE_DIGITS(v)];
- int ndig = 0;
- mp_size ua = MP_USED(a);
-
- ndig = s_vpack(v, vdig);
-
- if (ua > ndig)
- return 1;
- else if (ua < ndig)
- return -1;
- else
- return s_cdig(MP_DIGITS(a), vdig, ndig);
-}
-
-/* }}} */
-
-/* {{{ s_uadd(da, db, dc, size_a, size_b) */
-
-static mp_digit
-s_uadd(mp_digit *da, mp_digit *db, mp_digit *dc,
- mp_size size_a, mp_size size_b)
-{
- mp_size pos;
- mp_word w = 0;
-
- /* Insure that da is the longer of the two to simplify later code */
- if (size_b > size_a)
- {
- SWAP(mp_digit *, da, db);
- SWAP(mp_size, size_a, size_b);
- }
-
- /* Add corresponding digits until the shorter number runs out */
- for (pos = 0; pos < size_b; ++pos, ++da, ++db, ++dc)
- {
- w = w + (mp_word) *da + (mp_word) *db;
- *dc = LOWER_HALF(w);
- w = UPPER_HALF(w);
- }
-
- /* Propagate carries as far as necessary */
- for ( /* */ ; pos < size_a; ++pos, ++da, ++dc)
- {
- w = w + *da;
-
- *dc = LOWER_HALF(w);
- w = UPPER_HALF(w);
- }
-
- /* Return carry out */
- return (mp_digit) w;
-}
-
-/* }}} */
-
-/* {{{ s_usub(da, db, dc, size_a, size_b) */
-
-static void
-s_usub(mp_digit *da, mp_digit *db, mp_digit *dc,
- mp_size size_a, mp_size size_b)
-{
- mp_size pos;
- mp_word w = 0;
-
- /* We assume that |a| >= |b| so this should definitely hold */
- assert(size_a >= size_b);
-
- /* Subtract corresponding digits and propagate borrow */
- for (pos = 0; pos < size_b; ++pos, ++da, ++db, ++dc)
- {
- w = ((mp_word) MP_DIGIT_MAX + 1 + /* MP_RADIX */
- (mp_word) *da) - w - (mp_word) *db;
-
- *dc = LOWER_HALF(w);
- w = (UPPER_HALF(w) == 0);
- }
-
- /* Finish the subtraction for remaining upper digits of da */
- for ( /* */ ; pos < size_a; ++pos, ++da, ++dc)
- {
- w = ((mp_word) MP_DIGIT_MAX + 1 + /* MP_RADIX */
- (mp_word) *da) - w;
-
- *dc = LOWER_HALF(w);
- w = (UPPER_HALF(w) == 0);
- }
-
- /* If there is a borrow out at the end, it violates the precondition */
- assert(w == 0);
-}
-
-/* }}} */
-
-/* {{{ s_kmul(da, db, dc, size_a, size_b) */
-
-static int
-s_kmul(mp_digit *da, mp_digit *db, mp_digit *dc,
- mp_size size_a, mp_size size_b)
-{
- mp_size bot_size;
-
- /* Make sure b is the smaller of the two input values */
- if (size_b > size_a)
- {
- SWAP(mp_digit *, da, db);
- SWAP(mp_size, size_a, size_b);
- }
-
- /*
- * Insure that the bottom is the larger half in an odd-length split; the
- * code below relies on this being true.
- */
- bot_size = (size_a + 1) / 2;
-
- /*
- * If the values are big enough to bother with recursion, use the
- * Karatsuba algorithm to compute the product; otherwise use the normal
- * multiplication algorithm
- */
- if (multiply_threshold &&
- size_a >= multiply_threshold &&
- size_b > bot_size)
- {
-
- mp_digit *t1,
- *t2,
- *t3,
- carry;
-
- mp_digit *a_top = da + bot_size;
- mp_digit *b_top = db + bot_size;
-
- mp_size at_size = size_a - bot_size;
- mp_size bt_size = size_b - bot_size;
- mp_size buf_size = 2 * bot_size;
-
- /*
- * Do a single allocation for all three temporary buffers needed; each
- * buffer must be big enough to hold the product of two bottom halves,
- * and one buffer needs space for the completed product; twice the
- * space is plenty.
- */
- if ((t1 = s_alloc(4 * buf_size)) == NULL)
- return 0;
- t2 = t1 + buf_size;
- t3 = t2 + buf_size;
- ZERO(t1, 4 * buf_size);
-
- /*
- * t1 and t2 are initially used as temporaries to compute the inner
- * product (a1 + a0)(b1 + b0) = a1b1 + a1b0 + a0b1 + a0b0
- */
- carry = s_uadd(da, a_top, t1, bot_size, at_size); /* t1 = a1 + a0 */
- t1[bot_size] = carry;
-
- carry = s_uadd(db, b_top, t2, bot_size, bt_size); /* t2 = b1 + b0 */
- t2[bot_size] = carry;
-
- (void) s_kmul(t1, t2, t3, bot_size + 1, bot_size + 1); /* t3 = t1 * t2 */
-
- /*
- * Now we'll get t1 = a0b0 and t2 = a1b1, and subtract them out so
- * that we're left with only the pieces we want: t3 = a1b0 + a0b1
- */
- ZERO(t1, bot_size + 1);
- ZERO(t2, bot_size + 1);
- (void) s_kmul(da, db, t1, bot_size, bot_size); /* t1 = a0 * b0 */
- (void) s_kmul(a_top, b_top, t2, at_size, bt_size); /* t2 = a1 * b1 */
-
- /* Subtract out t1 and t2 to get the inner product */
- s_usub(t3, t1, t3, buf_size + 2, buf_size);
- s_usub(t3, t2, t3, buf_size + 2, buf_size);
-
- /* Assemble the output value */
- COPY(t1, dc, buf_size);
- (void) s_uadd(t3, dc + bot_size, dc + bot_size,
- buf_size + 1, buf_size + 1);
-
- (void) s_uadd(t2, dc + 2 * bot_size, dc + 2 * bot_size,
- buf_size, buf_size);
-
- s_free(t1); /* note t2 and t3 are just internal pointers
- * to t1 */
- }
- else
- {
- s_umul(da, db, dc, size_a, size_b);
- }
-
- return 1;
-}
-
-/* }}} */
-
-/* {{{ s_umul(da, db, dc, size_a, size_b) */
-
-static void
-s_umul(mp_digit *da, mp_digit *db, mp_digit *dc,
- mp_size size_a, mp_size size_b)
-{
- mp_size a,
- b;
- mp_word w;
-
- for (a = 0; a < size_a; ++a, ++dc, ++da)
- {
- mp_digit *dct = dc;
- mp_digit *dbt = db;
-
- if (*da == 0)
- continue;
-
- w = 0;
- for (b = 0; b < size_b; ++b, ++dbt, ++dct)
- {
- w = (mp_word) *da * (mp_word) *dbt + w + (mp_word) *dct;
-
- *dct = LOWER_HALF(w);
- w = UPPER_HALF(w);
- }
-
- *dct = (mp_digit) w;
- }
-}
-
-/* }}} */
-
-/* {{{ s_ksqr(da, dc, size_a) */
-
-static int
-s_ksqr(mp_digit *da, mp_digit *dc, mp_size size_a)
-{
- if (multiply_threshold && size_a > multiply_threshold)
- {
- mp_size bot_size = (size_a + 1) / 2;
- mp_digit *a_top = da + bot_size;
- mp_digit *t1,
- *t2,
- *t3;
- mp_size at_size = size_a - bot_size;
- mp_size buf_size = 2 * bot_size;
-
- if ((t1 = s_alloc(4 * buf_size)) == NULL)
- return 0;
- t2 = t1 + buf_size;
- t3 = t2 + buf_size;
- ZERO(t1, 4 * buf_size);
-
- (void) s_ksqr(da, t1, bot_size); /* t1 = a0 ^ 2 */
- (void) s_ksqr(a_top, t2, at_size); /* t2 = a1 ^ 2 */
-
- (void) s_kmul(da, a_top, t3, bot_size, at_size); /* t3 = a0 * a1 */
-
- /* Quick multiply t3 by 2, shifting left (can't overflow) */
- {
- int i,
- top = bot_size + at_size;
- mp_word w,
- save = 0;
-
- for (i = 0; i < top; ++i)
- {
- w = t3[i];
- w = (w << 1) | save;
- t3[i] = LOWER_HALF(w);
- save = UPPER_HALF(w);
- }
- t3[i] = LOWER_HALF(save);
- }
-
- /* Assemble the output value */
- COPY(t1, dc, 2 * bot_size);
- (void) s_uadd(t3, dc + bot_size, dc + bot_size,
- buf_size + 1, buf_size + 1);
-
- (void) s_uadd(t2, dc + 2 * bot_size, dc + 2 * bot_size,
- buf_size, buf_size);
-
- px_free(t1); /* note that t2 and t2 are internal pointers
- * only */
-
- }
- else
- {
- s_usqr(da, dc, size_a);
- }
-
- return 1;
-}
-
-/* }}} */
-
-/* {{{ s_usqr(da, dc, size_a) */
-
-static void
-s_usqr(mp_digit *da, mp_digit *dc, mp_size size_a)
-{
- mp_size i,
- j;
- mp_word w;
-
- for (i = 0; i < size_a; ++i, dc += 2, ++da)
- {
- mp_digit *dct = dc,
- *dat = da;
-
- if (*da == 0)
- continue;
-
- /* Take care of the first digit, no rollover */
- w = (mp_word) *dat * (mp_word) *dat + (mp_word) *dct;
- *dct = LOWER_HALF(w);
- w = UPPER_HALF(w);
- ++dat;
- ++dct;
-
- for (j = i + 1; j < size_a; ++j, ++dat, ++dct)
- {
- mp_word t = (mp_word) *da * (mp_word) *dat;
- mp_word u = w + (mp_word) *dct,
- ov = 0;
-
- /* Check if doubling t will overflow a word */
- if (HIGH_BIT_SET(t))
- ov = 1;
-
- w = t + t;
-
- /* Check if adding u to w will overflow a word */
- if (ADD_WILL_OVERFLOW(w, u))
- ov = 1;
-
- w += u;
-
- *dct = LOWER_HALF(w);
- w = UPPER_HALF(w);
- if (ov)
- {
- w += MP_DIGIT_MAX; /* MP_RADIX */
- ++w;
- }
- }
-
- w = w + *dct;
- *dct = (mp_digit) w;
- while ((w = UPPER_HALF(w)) != 0)
- {
- ++dct;
- w = w + *dct;
- *dct = LOWER_HALF(w);
- }
-
- assert(w == 0);
- }
-}
-
-/* }}} */
-
-/* {{{ s_dadd(a, b) */
-
-static void
-s_dadd(mp_int a, mp_digit b)
-{
- mp_word w = 0;
- mp_digit *da = MP_DIGITS(a);
- mp_size ua = MP_USED(a);
-
- w = (mp_word) *da + b;
- *da++ = LOWER_HALF(w);
- w = UPPER_HALF(w);
-
- for (ua -= 1; ua > 0; --ua, ++da)
- {
- w = (mp_word) *da + w;
-
- *da = LOWER_HALF(w);
- w = UPPER_HALF(w);
- }
-
- if (w)
- {
- *da = (mp_digit) w;
- MP_USED(a) += 1;
- }
-}
-
-/* }}} */
-
-/* {{{ s_dmul(a, b) */
-
-static void
-s_dmul(mp_int a, mp_digit b)
-{
- mp_word w = 0;
- mp_digit *da = MP_DIGITS(a);
- mp_size ua = MP_USED(a);
-
- while (ua > 0)
- {
- w = (mp_word) *da * b + w;
- *da++ = LOWER_HALF(w);
- w = UPPER_HALF(w);
- --ua;
- }
-
- if (w)
- {
- *da = (mp_digit) w;
- MP_USED(a) += 1;
- }
-}
-
-/* }}} */
-
-/* {{{ s_dbmul(da, b, dc, size_a) */
-
-static void
-s_dbmul(mp_digit *da, mp_digit b, mp_digit *dc, mp_size size_a)
-{
- mp_word w = 0;
-
- while (size_a > 0)
- {
- w = (mp_word) *da++ * (mp_word) b + w;
-
- *dc++ = LOWER_HALF(w);
- w = UPPER_HALF(w);
- --size_a;
- }
-
- if (w)
- *dc = LOWER_HALF(w);
-}
-
-/* }}} */
-
-/* {{{ s_ddiv(da, d, dc, size_a) */
-
-static mp_digit
-s_ddiv(mp_int a, mp_digit b)
-{
- mp_word w = 0,
- qdigit;
- mp_size ua = MP_USED(a);
- mp_digit *da = MP_DIGITS(a) + ua - 1;
-
- for ( /* */ ; ua > 0; --ua, --da)
- {
- w = (w << MP_DIGIT_BIT) | *da;
-
- if (w >= b)
- {
- qdigit = w / b;
- w = w % b;
- }
- else
- {
- qdigit = 0;
- }
-
- *da = (mp_digit) qdigit;
- }
-
- CLAMP(a);
- return (mp_digit) w;
-}
-
-/* }}} */
-
-/* {{{ s_qdiv(z, p2) */
-
-static void
-s_qdiv(mp_int z, mp_size p2)
-{
- mp_size ndig = p2 / MP_DIGIT_BIT,
- nbits = p2 % MP_DIGIT_BIT;
- mp_size uz = MP_USED(z);
-
- if (ndig)
- {
- mp_size mark;
- mp_digit *to,
- *from;
-
- if (ndig >= uz)
- {
- mp_int_zero(z);
- return;
- }
-
- to = MP_DIGITS(z);
- from = to + ndig;
-
- for (mark = ndig; mark < uz; ++mark)
- *to++ = *from++;
-
- MP_USED(z) = uz - ndig;
- }
-
- if (nbits)
- {
- mp_digit d = 0,
- *dz,
- save;
- mp_size up = MP_DIGIT_BIT - nbits;
-
- uz = MP_USED(z);
- dz = MP_DIGITS(z) + uz - 1;
-
- for ( /* */ ; uz > 0; --uz, --dz)
- {
- save = *dz;
-
- *dz = (*dz >> nbits) | (d << up);
- d = save;
- }
-
- CLAMP(z);
- }
-
- if (MP_USED(z) == 1 && z->digits[0] == 0)
- MP_SIGN(z) = MP_ZPOS;
-}
-
-/* }}} */
-
-/* {{{ s_qmod(z, p2) */
-
-static void
-s_qmod(mp_int z, mp_size p2)
-{
- mp_size start = p2 / MP_DIGIT_BIT + 1,
- rest = p2 % MP_DIGIT_BIT;
- mp_size uz = MP_USED(z);
- mp_digit mask = (1 << rest) - 1;
-
- if (start <= uz)
- {
- MP_USED(z) = start;
- z->digits[start - 1] &= mask;
- CLAMP(z);
- }
-}
-
-/* }}} */
-
-/* {{{ s_qmul(z, p2) */
-
-static int
-s_qmul(mp_int z, mp_size p2)
-{
- mp_size uz,
- need,
- rest,
- extra,
- i;
- mp_digit *from,
- *to,
- d;
-
- if (p2 == 0)
- return 1;
-
- uz = MP_USED(z);
- need = p2 / MP_DIGIT_BIT;
- rest = p2 % MP_DIGIT_BIT;
-
- /*
- * Figure out if we need an extra digit at the top end; this occurs if the
- * topmost `rest' bits of the high-order digit of z are not zero, meaning
- * they will be shifted off the end if not preserved
- */
- extra = 0;
- if (rest != 0)
- {
- mp_digit *dz = MP_DIGITS(z) + uz - 1;
-
- if ((*dz >> (MP_DIGIT_BIT - rest)) != 0)
- extra = 1;
- }
-
- if (!s_pad(z, uz + need + extra))
- return 0;
-
- /*
- * If we need to shift by whole digits, do that in one pass, then to back
- * and shift by partial digits.
- */
- if (need > 0)
- {
- from = MP_DIGITS(z) + uz - 1;
- to = from + need;
-
- for (i = 0; i < uz; ++i)
- *to-- = *from--;
-
- ZERO(MP_DIGITS(z), need);
- uz += need;
- }
-
- if (rest)
- {
- d = 0;
- for (i = need, from = MP_DIGITS(z) + need; i < uz; ++i, ++from)
- {
- mp_digit save = *from;
-
- *from = (*from << rest) | (d >> (MP_DIGIT_BIT - rest));
- d = save;
- }
-
- d >>= (MP_DIGIT_BIT - rest);
- if (d != 0)
- {
- *from = d;
- uz += extra;
- }
- }
-
- MP_USED(z) = uz;
- CLAMP(z);
-
- return 1;
-}
-
-/* }}} */
-
-/* {{{ s_qsub(z, p2) */
-
-/* Subtract |z| from 2^p2, assuming 2^p2 > |z|, and set z to be positive */
-static int
-s_qsub(mp_int z, mp_size p2)
-{
- mp_digit hi = (1 << (p2 % MP_DIGIT_BIT)),
- *zp;
- mp_size tdig = (p2 / MP_DIGIT_BIT),
- pos;
- mp_word w = 0;
-
- if (!s_pad(z, tdig + 1))
- return 0;
-
- for (pos = 0, zp = MP_DIGITS(z); pos < tdig; ++pos, ++zp)
- {
- w = ((mp_word) MP_DIGIT_MAX + 1) - w - (mp_word) *zp;
-
- *zp = LOWER_HALF(w);
- w = UPPER_HALF(w) ? 0 : 1;
- }
-
- w = ((mp_word) MP_DIGIT_MAX + 1 + hi) - w - (mp_word) *zp;
- *zp = LOWER_HALF(w);
-
- assert(UPPER_HALF(w) != 0); /* no borrow out should be possible */
-
- MP_SIGN(z) = MP_ZPOS;
- CLAMP(z);
-
- return 1;
-}
-
-/* }}} */
-
-/* {{{ s_dp2k(z) */
-
-static int
-s_dp2k(mp_int z)
-{
- int k = 0;
- mp_digit *dp = MP_DIGITS(z),
- d;
-
- if (MP_USED(z) == 1 && *dp == 0)
- return 1;
-
- while (*dp == 0)
- {
- k += MP_DIGIT_BIT;
- ++dp;
- }
-
- d = *dp;
- while ((d & 1) == 0)
- {
- d >>= 1;
- ++k;
- }
-
- return k;
-}
-
-/* }}} */
-
-/* {{{ s_isp2(z) */
-
-static int
-s_isp2(mp_int z)
-{
- mp_size uz = MP_USED(z),
- k = 0;
- mp_digit *dz = MP_DIGITS(z),
- d;
-
- while (uz > 1)
- {
- if (*dz++ != 0)
- return -1;
- k += MP_DIGIT_BIT;
- --uz;
- }
-
- d = *dz;
- while (d > 1)
- {
- if (d & 1)
- return -1;
- ++k;
- d >>= 1;
- }
-
- return (int) k;
-}
-
-/* }}} */
-
-/* {{{ s_2expt(z, k) */
-
-static int
-s_2expt(mp_int z, int k)
-{
- mp_size ndig,
- rest;
- mp_digit *dz;
-
- ndig = (k + MP_DIGIT_BIT) / MP_DIGIT_BIT;
- rest = k % MP_DIGIT_BIT;
-
- if (!s_pad(z, ndig))
- return 0;
-
- dz = MP_DIGITS(z);
- ZERO(dz, ndig);
- *(dz + ndig - 1) = (1 << rest);
- MP_USED(z) = ndig;
-
- return 1;
-}
-
-/* }}} */
-
-/* {{{ s_norm(a, b) */
-
-static int
-s_norm(mp_int a, mp_int b)
-{
- mp_digit d = b->digits[MP_USED(b) - 1];
- int k = 0;
-
- while (d < (mp_digit) ((mp_digit) 1 << (MP_DIGIT_BIT - 1)))
- { /* d < (MP_RADIX / 2) */
- d <<= 1;
- ++k;
- }
-
- /* These multiplications can't fail */
- if (k != 0)
- {
- (void) s_qmul(a, (mp_size) k);
- (void) s_qmul(b, (mp_size) k);
- }
-
- return k;
-}
-
-/* }}} */
-
-/* {{{ s_brmu(z, m) */
-
-static mp_result
-s_brmu(mp_int z, mp_int m)
-{
- mp_size um = MP_USED(m) * 2;
-
- if (!s_pad(z, um))
- return MP_MEMORY;
-
- s_2expt(z, MP_DIGIT_BIT * um);
- return mp_int_div(z, m, z, NULL);
-}
-
-/* }}} */
-
-/* {{{ s_reduce(x, m, mu, q1, q2) */
-
-static int
-s_reduce(mp_int x, mp_int m, mp_int mu, mp_int q1, mp_int q2)
-{
- mp_size um = MP_USED(m),
- umb_p1,
- umb_m1;
-
- umb_p1 = (um + 1) * MP_DIGIT_BIT;
- umb_m1 = (um - 1) * MP_DIGIT_BIT;
-
- if (mp_int_copy(x, q1) != MP_OK)
- return 0;
-
- /* Compute q2 = floor((floor(x / b^(k-1)) * mu) / b^(k+1)) */
- s_qdiv(q1, umb_m1);
- UMUL(q1, mu, q2);
- s_qdiv(q2, umb_p1);
-
- /* Set x = x mod b^(k+1) */
- s_qmod(x, umb_p1);
-
- /*
- * Now, q is a guess for the quotient a / m. Compute x - q * m mod
- * b^(k+1), replacing x. This may be off by a factor of 2m, but no more
- * than that.
- */
- UMUL(q2, m, q1);
- s_qmod(q1, umb_p1);
- (void) mp_int_sub(x, q1, x); /* can't fail */
-
- /*
- * The result may be < 0; if it is, add b^(k+1) to pin it in the proper
- * range.
- */
- if ((CMPZ(x) < 0) && !s_qsub(x, umb_p1))
- return 0;
-
- /*
- * If x > m, we need to back it off until it is in range. This will be
- * required at most twice.
- */
- if (mp_int_compare(x, m) >= 0)
- (void) mp_int_sub(x, m, x);
- if (mp_int_compare(x, m) >= 0)
- (void) mp_int_sub(x, m, x);
-
- /* At this point, x has been properly reduced. */
- return 1;
-}
-
-/* }}} */
-
-/* {{{ s_embar(a, b, m, mu, c) */
-
-/* Perform modular exponentiation using Barrett's method, where mu is
- the reduction constant for m. Assumes a < m, b > 0. */
-static mp_result
-s_embar(mp_int a, mp_int b, mp_int m, mp_int mu, mp_int c)
-{
- mp_digit *db,
- *dbt,
- umu,
- d;
- mpz_t temp[3];
- mp_result res;
- int last = 0;
-
- umu = MP_USED(mu);
- db = MP_DIGITS(b);
- dbt = db + MP_USED(b) - 1;
-
- while (last < 3)
- SETUP(mp_int_init_size(TEMP(last), 2 * umu), last);
-
- (void) mp_int_set_value(c, 1);
-
- /* Take care of low-order digits */
- while (db < dbt)
- {
- int i;
-
- for (d = *db, i = MP_DIGIT_BIT; i > 0; --i, d >>= 1)
- {
- if (d & 1)
- {
- /* The use of a second temporary avoids allocation */
- UMUL(c, a, TEMP(0));
- if (!s_reduce(TEMP(0), m, mu, TEMP(1), TEMP(2)))
- {
- res = MP_MEMORY;
- goto CLEANUP;
- }
- mp_int_copy(TEMP(0), c);
- }
-
-
- USQR(a, TEMP(0));
- assert(MP_SIGN(TEMP(0)) == MP_ZPOS);
- if (!s_reduce(TEMP(0), m, mu, TEMP(1), TEMP(2)))
- {
- res = MP_MEMORY;
- goto CLEANUP;
- }
- assert(MP_SIGN(TEMP(0)) == MP_ZPOS);
- mp_int_copy(TEMP(0), a);
-
-
- }
-
- ++db;
- }
-
- /* Take care of highest-order digit */
- d = *dbt;
- for (;;)
- {
- if (d & 1)
- {
- UMUL(c, a, TEMP(0));
- if (!s_reduce(TEMP(0), m, mu, TEMP(1), TEMP(2)))
- {
- res = MP_MEMORY;
- goto CLEANUP;
- }
- mp_int_copy(TEMP(0), c);
- }
-
- d >>= 1;
- if (!d)
- break;
-
- USQR(a, TEMP(0));
- if (!s_reduce(TEMP(0), m, mu, TEMP(1), TEMP(2)))
- {
- res = MP_MEMORY;
- goto CLEANUP;
- }
- (void) mp_int_copy(TEMP(0), a);
- }
-
-CLEANUP:
- while (--last >= 0)
- mp_int_clear(TEMP(last));
-
- return res;
-}
-
-/* }}} */
-
-/* {{{ s_udiv(a, b) */
-
-/* Precondition: a >= b and b > 0
- Postcondition: a' = a / b, b' = a % b
- */
-static mp_result
-s_udiv(mp_int a, mp_int b)
-{
- mpz_t q,
- r,
- t;
- mp_size ua,
- ub,
- qpos = 0;
- mp_digit *da,
- btop;
- mp_result res = MP_OK;
- int k,
- skip = 0;
-
- /* Force signs to positive */
- MP_SIGN(a) = MP_ZPOS;
- MP_SIGN(b) = MP_ZPOS;
-
- /* Normalize, per Knuth */
- k = s_norm(a, b);
-
- ua = MP_USED(a);
- ub = MP_USED(b);
- btop = b->digits[ub - 1];
- if ((res = mp_int_init_size(&q, ua)) != MP_OK)
- return res;
- if ((res = mp_int_init_size(&t, ua + 1)) != MP_OK)
- goto CLEANUP;
-
- da = MP_DIGITS(a);
- r.digits = da + ua - 1; /* The contents of r are shared with a */
- r.used = 1;
- r.sign = MP_ZPOS;
- r.alloc = MP_ALLOC(a);
- ZERO(t.digits, t.alloc);
-
- /* Solve for quotient digits, store in q.digits in reverse order */
- while (r.digits >= da)
- {
- assert(qpos <= q.alloc);
-
- if (s_ucmp(b, &r) > 0)
- {
- r.digits -= 1;
- r.used += 1;
-
- if (++skip > 1)
- q.digits[qpos++] = 0;
-
- CLAMP(&r);
- }
- else
- {
- mp_word pfx = r.digits[r.used - 1];
- mp_word qdigit;
-
- if (r.used > 1 && (pfx < btop || r.digits[r.used - 2] == 0))
- {
- pfx <<= MP_DIGIT_BIT / 2;
- pfx <<= MP_DIGIT_BIT / 2;
- pfx |= r.digits[r.used - 2];
- }
-
- qdigit = pfx / btop;
- if (qdigit > MP_DIGIT_MAX)
- qdigit = 1;
-
- s_dbmul(MP_DIGITS(b), (mp_digit) qdigit, t.digits, ub);
- t.used = ub + 1;
- CLAMP(&t);
- while (s_ucmp(&t, &r) > 0)
- {
- --qdigit;
- (void) mp_int_sub(&t, b, &t); /* cannot fail */
- }
-
- s_usub(r.digits, t.digits, r.digits, r.used, t.used);
- CLAMP(&r);
-
- q.digits[qpos++] = (mp_digit) qdigit;
- ZERO(t.digits, t.used);
- skip = 0;
- }
- }
-
- /* Put quotient digits in the correct order, and discard extra zeroes */
- q.used = qpos;
- REV(mp_digit, q.digits, qpos);
- CLAMP(&q);
-
- /* Denormalize the remainder */
- CLAMP(a);
- if (k != 0)
- s_qdiv(a, k);
-
- mp_int_copy(a, b); /* ok: 0 <= r < b */
- mp_int_copy(&q, a); /* ok: q <= a */
-
- mp_int_clear(&t);
-CLEANUP:
- mp_int_clear(&q);
- return res;
-}
-
-/* }}} */
-
-/* {{{ s_outlen(z, r) */
-
-/* Precondition: 2 <= r < 64 */
-static int
-s_outlen(mp_int z, mp_size r)
-{
- mp_result bits;
- double raw;
-
- bits = mp_int_count_bits(z);
- raw = (double) bits *s_log2[r];
-
- return (int) (raw + 0.999999);
-}
-
-/* }}} */
-
-/* {{{ s_inlen(len, r) */
-
-static mp_size
-s_inlen(int len, mp_size r)
-{
- double raw = (double) len / s_log2[r];
- mp_size bits = (mp_size) (raw + 0.5);
-
- return (mp_size) ((bits + (MP_DIGIT_BIT - 1)) / MP_DIGIT_BIT);
-}
-
-/* }}} */
-
-/* {{{ s_ch2val(c, r) */
-
-static int
-s_ch2val(char c, int r)
-{
- int out;
-
- if (isdigit((unsigned char) c))
- out = c - '0';
- else if (r > 10 && isalpha((unsigned char) c))
- out = toupper((unsigned char) c) - 'A' + 10;
- else
- return -1;
-
- return (out >= r) ? -1 : out;
-}
-
-/* }}} */
-
-/* {{{ s_val2ch(v, caps) */
-
-static char
-s_val2ch(int v, int caps)
-{
- assert(v >= 0);
-
- if (v < 10)
- return v + '0';
- else
- {
- char out = (v - 10) + 'a';
-
- if (caps)
- return toupper((unsigned char) out);
- else
- return out;
- }
-}
-
-/* }}} */
-
-/* {{{ s_2comp(buf, len) */
-
-static void
-s_2comp(unsigned char *buf, int len)
-{
- int i;
- unsigned short s = 1;
-
- for (i = len - 1; i >= 0; --i)
- {
- unsigned char c = ~buf[i];
-
- s = c + s;
- c = s & UCHAR_MAX;
- s >>= CHAR_BIT;
-
- buf[i] = c;
- }
-
- /* last carry out is ignored */
-}
-
-/* }}} */
-
-/* {{{ s_tobin(z, buf, *limpos) */
-
-static mp_result
-s_tobin(mp_int z, unsigned char *buf, int *limpos, int pad)
-{
- mp_size uz;
- mp_digit *dz;
- int pos = 0,
- limit = *limpos;
-
- uz = MP_USED(z);
- dz = MP_DIGITS(z);
- while (uz > 0 && pos < limit)
- {
- mp_digit d = *dz++;
- int i;
-
- for (i = sizeof(mp_digit); i > 0 && pos < limit; --i)
- {
- buf[pos++] = (unsigned char) d;
- d >>= CHAR_BIT;
-
- /* Don't write leading zeroes */
- if (d == 0 && uz == 1)
- i = 0; /* exit loop without signaling truncation */
- }
-
- /* Detect truncation (loop exited with pos >= limit) */
- if (i > 0)
- break;
-
- --uz;
- }
-
- if (pad != 0 && (buf[pos - 1] >> (CHAR_BIT - 1)))
- {
- if (pos < limit)
- buf[pos++] = 0;
- else
- uz = 1;
- }
-
- /* Digits are in reverse order, fix that */
- REV(unsigned char, buf, pos);
-
- /* Return the number of bytes actually written */
- *limpos = pos;
-
- return (uz == 0) ? MP_OK : MP_TRUNC;
-}
-
-/* }}} */
-
-/* {{{ s_print(tag, z) */
-
-#if 0
-void
-s_print(char *tag, mp_int z)
-{
- int i;
-
- fprintf(stderr, "%s: %c ", tag,
- (MP_SIGN(z) == MP_NEG) ? '-' : '+');
-
- for (i = MP_USED(z) - 1; i >= 0; --i)
- fprintf(stderr, "%0*X", (int) (MP_DIGIT_BIT / 4), z->digits[i]);
-
- fputc('\n', stderr);
-
-}
-
-void
-s_print_buf(char *tag, mp_digit *buf, mp_size num)
-{
- int i;
-
- fprintf(stderr, "%s: ", tag);
-
- for (i = num - 1; i >= 0; --i)
- fprintf(stderr, "%0*X", (int) (MP_DIGIT_BIT / 4), buf[i]);
-
- fputc('\n', stderr);
-}
-#endif
-
-/* }}} */
-
-/* HERE THERE BE DRAGONS */
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/imath.h
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/imath.h b/contrib/pgcrypto/imath.h
deleted file mode 100644
index 09d0e3e..0000000
--- a/contrib/pgcrypto/imath.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- Name: imath.h
- Purpose: Arbitrary precision integer arithmetic routines.
- Author: M. J. Fromberger <http://www.dartmouth.edu/~sting/>
- Info: Id: imath.h 21 2006-04-02 18:58:36Z sting
-
- Copyright (C) 2002 Michael J. Fromberger, All Rights Reserved.
-
- Permission is hereby granted, free of charge, to any person
- obtaining a copy of this software and associated documentation files
- (the "Software"), to deal in the Software without restriction,
- including without limitation the rights to use, copy, modify, merge,
- publish, distribute, sublicense, and/or sell copies of the Software,
- and to permit persons to whom the Software is furnished to do so,
- subject to the following conditions:
-
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
- */
-/* $PostgreSQL: pgsql/contrib/pgcrypto/imath.h,v 1.7 2009/06/11 14:48:52 momjian Exp $ */
-
-#ifndef IMATH_H_
-#define IMATH_H_
-
-/* use always 32bit digits - should some arch use 16bit digits? */
-#define USE_LONG_LONG
-
-#include <limits.h>
-
-typedef unsigned char mp_sign;
-typedef unsigned int mp_size;
-typedef int mp_result;
-
-#ifdef USE_LONG_LONG
-typedef uint32 mp_digit;
-typedef uint64 mp_word;
-
-#define MP_DIGIT_MAX 0xFFFFFFFFULL
-#define MP_WORD_MAX 0xFFFFFFFFFFFFFFFFULL
-#else
-typedef uint16 mp_digit;
-typedef uint32 mp_word;
-
-#define MP_DIGIT_MAX 0xFFFFUL
-#define MP_WORD_MAX 0xFFFFFFFFUL
-#endif
-
-typedef struct mpz
-{
- mp_digit *digits;
- mp_size alloc;
- mp_size used;
- mp_sign sign;
-} mpz_t ,
- *mp_int;
-
-#define MP_DIGITS(Z) ((Z)->digits)
-#define MP_ALLOC(Z) ((Z)->alloc)
-#define MP_USED(Z) ((Z)->used)
-#define MP_SIGN(Z) ((Z)->sign)
-
-extern const mp_result MP_OK;
-extern const mp_result MP_FALSE;
-extern const mp_result MP_TRUE;
-extern const mp_result MP_MEMORY;
-extern const mp_result MP_RANGE;
-extern const mp_result MP_UNDEF;
-extern const mp_result MP_TRUNC;
-extern const mp_result MP_BADARG;
-
-#define MP_DIGIT_BIT (sizeof(mp_digit) * CHAR_BIT)
-#define MP_WORD_BIT (sizeof(mp_word) * CHAR_BIT)
-
-#define MP_MIN_RADIX 2
-#define MP_MAX_RADIX 36
-
-extern const mp_sign MP_NEG;
-extern const mp_sign MP_ZPOS;
-
-#define mp_int_is_odd(Z) ((Z)->digits[0] & 1)
-#define mp_int_is_even(Z) !((Z)->digits[0] & 1)
-
-mp_size mp_get_default_precision(void);
-void mp_set_default_precision(mp_size s);
-mp_size mp_get_multiply_threshold(void);
-void mp_set_multiply_threshold(mp_size s);
-
-mp_result mp_int_init(mp_int z);
-mp_int mp_int_alloc(void);
-mp_result mp_int_init_size(mp_int z, mp_size prec);
-mp_result mp_int_init_copy(mp_int z, mp_int old);
-mp_result mp_int_init_value(mp_int z, int value);
-mp_result mp_int_set_value(mp_int z, int value);
-void mp_int_clear(mp_int z);
-void mp_int_free(mp_int z);
-
-mp_result mp_int_copy(mp_int a, mp_int c); /* c = a */
-void mp_int_swap(mp_int a, mp_int c); /* swap a, c */
-void mp_int_zero(mp_int z); /* z = 0 */
-mp_result mp_int_abs(mp_int a, mp_int c); /* c = |a| */
-mp_result mp_int_neg(mp_int a, mp_int c); /* c = -a */
-mp_result mp_int_add(mp_int a, mp_int b, mp_int c); /* c = a + b */
-mp_result mp_int_add_value(mp_int a, int value, mp_int c);
-mp_result mp_int_sub(mp_int a, mp_int b, mp_int c); /* c = a - b */
-mp_result mp_int_sub_value(mp_int a, int value, mp_int c);
-mp_result mp_int_mul(mp_int a, mp_int b, mp_int c); /* c = a * b */
-mp_result mp_int_mul_value(mp_int a, int value, mp_int c);
-mp_result mp_int_mul_pow2(mp_int a, int p2, mp_int c);
-mp_result mp_int_sqr(mp_int a, mp_int c); /* c = a * a */
-
-mp_result
-mp_int_div(mp_int a, mp_int b, /* q = a / b */
- mp_int q, mp_int r); /* r = a % b */
-mp_result
-mp_int_div_value(mp_int a, int value, /* q = a / value */
- mp_int q, int *r); /* r = a % value */
-mp_result
-mp_int_div_pow2(mp_int a, int p2, /* q = a / 2^p2 */
- mp_int q, mp_int r); /* r = q % 2^p2 */
-mp_result mp_int_mod(mp_int a, mp_int m, mp_int c); /* c = a % m */
-
-#define mp_int_mod_value(A, V, R) mp_int_div_value((A), (V), 0, (R))
-mp_result mp_int_expt(mp_int a, int b, mp_int c); /* c = a^b */
-mp_result mp_int_expt_value(int a, int b, mp_int c); /* c = a^b */
-
-int mp_int_compare(mp_int a, mp_int b); /* a <=> b */
-int mp_int_compare_unsigned(mp_int a, mp_int b); /* |a| <=> |b| */
-int mp_int_compare_zero(mp_int z); /* a <=> 0 */
-int mp_int_compare_value(mp_int z, int value); /* a <=> v */
-
-/* Returns true if v|a, false otherwise (including errors) */
-int mp_int_divisible_value(mp_int a, int v);
-
-/* Returns k >= 0 such that z = 2^k, if one exists; otherwise < 0 */
-int mp_int_is_pow2(mp_int z);
-
-mp_result
-mp_int_exptmod(mp_int a, mp_int b, mp_int m,
- mp_int c); /* c = a^b (mod m) */
-mp_result
-mp_int_exptmod_evalue(mp_int a, int value,
- mp_int m, mp_int c); /* c = a^v (mod m) */
-mp_result
-mp_int_exptmod_bvalue(int value, mp_int b,
- mp_int m, mp_int c); /* c = v^b (mod m) */
-mp_result
-mp_int_exptmod_known(mp_int a, mp_int b,
- mp_int m, mp_int mu,
- mp_int c); /* c = a^b (mod m) */
-mp_result mp_int_redux_const(mp_int m, mp_int c);
-
-mp_result mp_int_invmod(mp_int a, mp_int m, mp_int c); /* c = 1/a (mod m) */
-
-mp_result mp_int_gcd(mp_int a, mp_int b, mp_int c); /* c = gcd(a, b) */
-
-mp_result
-mp_int_egcd(mp_int a, mp_int b, mp_int c, /* c = gcd(a, b) */
- mp_int x, mp_int y); /* c = ax + by */
-
-mp_result mp_int_sqrt(mp_int a, mp_int c); /* c = floor(sqrt(q)) */
-
-/* Convert to an int, if representable (returns MP_RANGE if not). */
-mp_result mp_int_to_int(mp_int z, int *out);
-
-/* Convert to nul-terminated string with the specified radix, writing at
- most limit characters including the nul terminator */
-mp_result mp_int_to_string(mp_int z, mp_size radix,
- char *str, int limit);
-
-/* Return the number of characters required to represent
- z in the given radix. May over-estimate. */
-mp_result mp_int_string_len(mp_int z, mp_size radix);
-
-/* Read zero-terminated string into z */
-mp_result mp_int_read_string(mp_int z, mp_size radix, const char *str);
-mp_result mp_int_read_cstring(mp_int z, mp_size radix, const char *str,
- char **end);
-
-/* Return the number of significant bits in z */
-mp_result mp_int_count_bits(mp_int z);
-
-/* Convert z to two's complement binary, writing at most limit bytes */
-mp_result mp_int_to_binary(mp_int z, unsigned char *buf, int limit);
-
-/* Read a two's complement binary value into z from the given buffer */
-mp_result mp_int_read_binary(mp_int z, unsigned char *buf, int len);
-
-/* Return the number of bytes required to represent z in binary. */
-mp_result mp_int_binary_len(mp_int z);
-
-/* Convert z to unsigned binary, writing at most limit bytes */
-mp_result mp_int_to_unsigned(mp_int z, unsigned char *buf, int limit);
-
-/* Read an unsigned binary value into z from the given buffer */
-mp_result mp_int_read_unsigned(mp_int z, unsigned char *buf, int len);
-
-/* Return the number of bytes required to represent z as unsigned output */
-mp_result mp_int_unsigned_len(mp_int z);
-
-/* Return a statically allocated string describing error code res */
-const char *mp_error_string(mp_result res);
-
-#if 0
-void s_print(char *tag, mp_int z);
-void s_print_buf(char *tag, mp_digit *buf, mp_size num);
-#endif
-
-#endif /* end IMATH_H_ */
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/internal-sha2.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/internal-sha2.c b/contrib/pgcrypto/internal-sha2.c
deleted file mode 100644
index 1e36a36..0000000
--- a/contrib/pgcrypto/internal-sha2.c
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- * internal.c
- * Wrapper for builtin functions
- *
- * Copyright (c) 2001 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/internal-sha2.c,v 1.3 2009/06/11 14:48:52 momjian Exp $
- */
-
-#include "postgres.h"
-
-#include <time.h>
-
-#include "px.h"
-#include "sha2.h"
-
-void init_sha224(PX_MD *h);
-void init_sha256(PX_MD *h);
-void init_sha384(PX_MD *h);
-void init_sha512(PX_MD *h);
-
-/* SHA224 */
-
-static unsigned
-int_sha224_len(PX_MD *h)
-{
- return SHA224_DIGEST_LENGTH;
-}
-
-static unsigned
-int_sha224_block_len(PX_MD *h)
-{
- return SHA224_BLOCK_LENGTH;
-}
-
-static void
-int_sha224_update(PX_MD *h, const uint8 *data, unsigned dlen)
-{
- SHA224_CTX *ctx = (SHA224_CTX *) h->p.ptr;
-
- SHA224_Update(ctx, data, dlen);
-}
-
-static void
-int_sha224_reset(PX_MD *h)
-{
- SHA224_CTX *ctx = (SHA224_CTX *) h->p.ptr;
-
- SHA224_Init(ctx);
-}
-
-static void
-int_sha224_finish(PX_MD *h, uint8 *dst)
-{
- SHA224_CTX *ctx = (SHA224_CTX *) h->p.ptr;
-
- SHA224_Final(dst, ctx);
-}
-
-static void
-int_sha224_free(PX_MD *h)
-{
- SHA224_CTX *ctx = (SHA224_CTX *) h->p.ptr;
-
- memset(ctx, 0, sizeof(*ctx));
- px_free(ctx);
- px_free(h);
-}
-
-/* SHA256 */
-
-static unsigned
-int_sha256_len(PX_MD *h)
-{
- return SHA256_DIGEST_LENGTH;
-}
-
-static unsigned
-int_sha256_block_len(PX_MD *h)
-{
- return SHA256_BLOCK_LENGTH;
-}
-
-static void
-int_sha256_update(PX_MD *h, const uint8 *data, unsigned dlen)
-{
- SHA256_CTX *ctx = (SHA256_CTX *) h->p.ptr;
-
- SHA256_Update(ctx, data, dlen);
-}
-
-static void
-int_sha256_reset(PX_MD *h)
-{
- SHA256_CTX *ctx = (SHA256_CTX *) h->p.ptr;
-
- SHA256_Init(ctx);
-}
-
-static void
-int_sha256_finish(PX_MD *h, uint8 *dst)
-{
- SHA256_CTX *ctx = (SHA256_CTX *) h->p.ptr;
-
- SHA256_Final(dst, ctx);
-}
-
-static void
-int_sha256_free(PX_MD *h)
-{
- SHA256_CTX *ctx = (SHA256_CTX *) h->p.ptr;
-
- memset(ctx, 0, sizeof(*ctx));
- px_free(ctx);
- px_free(h);
-}
-
-/* SHA384 */
-
-static unsigned
-int_sha384_len(PX_MD *h)
-{
- return SHA384_DIGEST_LENGTH;
-}
-
-static unsigned
-int_sha384_block_len(PX_MD *h)
-{
- return SHA384_BLOCK_LENGTH;
-}
-
-static void
-int_sha384_update(PX_MD *h, const uint8 *data, unsigned dlen)
-{
- SHA384_CTX *ctx = (SHA384_CTX *) h->p.ptr;
-
- SHA384_Update(ctx, data, dlen);
-}
-
-static void
-int_sha384_reset(PX_MD *h)
-{
- SHA384_CTX *ctx = (SHA384_CTX *) h->p.ptr;
-
- SHA384_Init(ctx);
-}
-
-static void
-int_sha384_finish(PX_MD *h, uint8 *dst)
-{
- SHA384_CTX *ctx = (SHA384_CTX *) h->p.ptr;
-
- SHA384_Final(dst, ctx);
-}
-
-static void
-int_sha384_free(PX_MD *h)
-{
- SHA384_CTX *ctx = (SHA384_CTX *) h->p.ptr;
-
- memset(ctx, 0, sizeof(*ctx));
- px_free(ctx);
- px_free(h);
-}
-
-/* SHA512 */
-
-static unsigned
-int_sha512_len(PX_MD *h)
-{
- return SHA512_DIGEST_LENGTH;
-}
-
-static unsigned
-int_sha512_block_len(PX_MD *h)
-{
- return SHA512_BLOCK_LENGTH;
-}
-
-static void
-int_sha512_update(PX_MD *h, const uint8 *data, unsigned dlen)
-{
- SHA512_CTX *ctx = (SHA512_CTX *) h->p.ptr;
-
- SHA512_Update(ctx, data, dlen);
-}
-
-static void
-int_sha512_reset(PX_MD *h)
-{
- SHA512_CTX *ctx = (SHA512_CTX *) h->p.ptr;
-
- SHA512_Init(ctx);
-}
-
-static void
-int_sha512_finish(PX_MD *h, uint8 *dst)
-{
- SHA512_CTX *ctx = (SHA512_CTX *) h->p.ptr;
-
- SHA512_Final(dst, ctx);
-}
-
-static void
-int_sha512_free(PX_MD *h)
-{
- SHA512_CTX *ctx = (SHA512_CTX *) h->p.ptr;
-
- memset(ctx, 0, sizeof(*ctx));
- px_free(ctx);
- px_free(h);
-}
-
-/* init functions */
-
-void
-init_sha224(PX_MD *md)
-{
- SHA224_CTX *ctx;
-
- ctx = px_alloc(sizeof(*ctx));
- memset(ctx, 0, sizeof(*ctx));
-
- md->p.ptr = ctx;
-
- md->result_size = int_sha224_len;
- md->block_size = int_sha224_block_len;
- md->reset = int_sha224_reset;
- md->update = int_sha224_update;
- md->finish = int_sha224_finish;
- md->free = int_sha224_free;
-
- md->reset(md);
-}
-
-void
-init_sha256(PX_MD *md)
-{
- SHA256_CTX *ctx;
-
- ctx = px_alloc(sizeof(*ctx));
- memset(ctx, 0, sizeof(*ctx));
-
- md->p.ptr = ctx;
-
- md->result_size = int_sha256_len;
- md->block_size = int_sha256_block_len;
- md->reset = int_sha256_reset;
- md->update = int_sha256_update;
- md->finish = int_sha256_finish;
- md->free = int_sha256_free;
-
- md->reset(md);
-}
-
-void
-init_sha384(PX_MD *md)
-{
- SHA384_CTX *ctx;
-
- ctx = px_alloc(sizeof(*ctx));
- memset(ctx, 0, sizeof(*ctx));
-
- md->p.ptr = ctx;
-
- md->result_size = int_sha384_len;
- md->block_size = int_sha384_block_len;
- md->reset = int_sha384_reset;
- md->update = int_sha384_update;
- md->finish = int_sha384_finish;
- md->free = int_sha384_free;
-
- md->reset(md);
-}
-
-void
-init_sha512(PX_MD *md)
-{
- SHA512_CTX *ctx;
-
- ctx = px_alloc(sizeof(*ctx));
- memset(ctx, 0, sizeof(*ctx));
-
- md->p.ptr = ctx;
-
- md->result_size = int_sha512_len;
- md->block_size = int_sha512_block_len;
- md->reset = int_sha512_reset;
- md->update = int_sha512_update;
- md->finish = int_sha512_finish;
- md->free = int_sha512_free;
-
- md->reset(md);
-}
[07/11] incubator-hawq git commit: HAWQ-394. Remove pgcrypto from
code base
Posted by hu...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/internal.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/internal.c b/contrib/pgcrypto/internal.c
deleted file mode 100644
index 07e133b..0000000
--- a/contrib/pgcrypto/internal.c
+++ /dev/null
@@ -1,691 +0,0 @@
-/*
- * internal.c
- * Wrapper for builtin functions
- *
- * Copyright (c) 2001 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/internal.c,v 1.29 2009/06/11 14:48:52 momjian Exp $
- */
-
-#include "postgres.h"
-
-#include <time.h>
-
-#include "px.h"
-#include "md5.h"
-#include "sha1.h"
-#include "sha2.h"
-#include "blf.h"
-#include "rijndael.h"
-#include "fortuna.h"
-
-/*
- * System reseeds should be separated at least this much.
- */
-#define SYSTEM_RESEED_MIN (20*60) /* 20 min */
-/*
- * How often to roll dice.
- */
-#define SYSTEM_RESEED_CHECK_TIME (10*60) /* 10 min */
-/*
- * The chance is x/256 that the reseed happens.
- */
-#define SYSTEM_RESEED_CHANCE (4) /* 256/4 * 10min ~ 10h */
-
-/*
- * If this much time has passed, force reseed.
- */
-#define SYSTEM_RESEED_MAX (12*60*60) /* 12h */
-
-
-#ifndef MD5_DIGEST_LENGTH
-#define MD5_DIGEST_LENGTH 16
-#endif
-
-#ifndef SHA1_DIGEST_LENGTH
-#ifdef SHA1_RESULTLEN
-#define SHA1_DIGEST_LENGTH SHA1_RESULTLEN
-#else
-#define SHA1_DIGEST_LENGTH 20
-#endif
-#endif
-
-#define SHA1_BLOCK_SIZE 64
-#define MD5_BLOCK_SIZE 64
-
-static void init_md5(PX_MD *h);
-static void init_sha1(PX_MD *h);
-
-void init_sha224(PX_MD *h);
-void init_sha256(PX_MD *h);
-void init_sha384(PX_MD *h);
-void init_sha512(PX_MD *h);
-
-struct int_digest
-{
- char *name;
- void (*init) (PX_MD *h);
-};
-
-static const struct int_digest
- int_digest_list[] = {
- {"md5", init_md5},
- {"sha1", init_sha1},
- {"sha224", init_sha224},
- {"sha256", init_sha256},
- {"sha384", init_sha384},
- {"sha512", init_sha512},
- {NULL, NULL}
-};
-
-/* MD5 */
-
-static unsigned
-int_md5_len(PX_MD *h)
-{
- return MD5_DIGEST_LENGTH;
-}
-
-static unsigned
-int_md5_block_len(PX_MD *h)
-{
- return MD5_BLOCK_SIZE;
-}
-
-static void
-int_md5_update(PX_MD *h, const uint8 *data, unsigned dlen)
-{
- MD5_CTX *ctx = (MD5_CTX *) h->p.ptr;
-
- MD5Update(ctx, data, dlen);
-}
-
-static void
-int_md5_reset(PX_MD *h)
-{
- MD5_CTX *ctx = (MD5_CTX *) h->p.ptr;
-
- MD5Init(ctx);
-}
-
-static void
-int_md5_finish(PX_MD *h, uint8 *dst)
-{
- MD5_CTX *ctx = (MD5_CTX *) h->p.ptr;
-
- MD5Final(dst, ctx);
-}
-
-static void
-int_md5_free(PX_MD *h)
-{
- MD5_CTX *ctx = (MD5_CTX *) h->p.ptr;
-
- memset(ctx, 0, sizeof(*ctx));
- px_free(ctx);
- px_free(h);
-}
-
-/* SHA1 */
-
-static unsigned
-int_sha1_len(PX_MD *h)
-{
- return SHA1_DIGEST_LENGTH;
-}
-
-static unsigned
-int_sha1_block_len(PX_MD *h)
-{
- return SHA1_BLOCK_SIZE;
-}
-
-static void
-int_sha1_update(PX_MD *h, const uint8 *data, unsigned dlen)
-{
- SHA1_CTX *ctx = (SHA1_CTX *) h->p.ptr;
-
- SHA1Update(ctx, data, dlen);
-}
-
-static void
-int_sha1_reset(PX_MD *h)
-{
- SHA1_CTX *ctx = (SHA1_CTX *) h->p.ptr;
-
- SHA1Init(ctx);
-}
-
-static void
-int_sha1_finish(PX_MD *h, uint8 *dst)
-{
- SHA1_CTX *ctx = (SHA1_CTX *) h->p.ptr;
-
- SHA1Final(dst, ctx);
-}
-
-static void
-int_sha1_free(PX_MD *h)
-{
- SHA1_CTX *ctx = (SHA1_CTX *) h->p.ptr;
-
- memset(ctx, 0, sizeof(*ctx));
- px_free(ctx);
- px_free(h);
-}
-
-/* init functions */
-
-static void
-init_md5(PX_MD *md)
-{
- MD5_CTX *ctx;
-
- ctx = px_alloc(sizeof(*ctx));
- memset(ctx, 0, sizeof(*ctx));
-
- md->p.ptr = ctx;
-
- md->result_size = int_md5_len;
- md->block_size = int_md5_block_len;
- md->reset = int_md5_reset;
- md->update = int_md5_update;
- md->finish = int_md5_finish;
- md->free = int_md5_free;
-
- md->reset(md);
-}
-
-static void
-init_sha1(PX_MD *md)
-{
- SHA1_CTX *ctx;
-
- ctx = px_alloc(sizeof(*ctx));
- memset(ctx, 0, sizeof(*ctx));
-
- md->p.ptr = ctx;
-
- md->result_size = int_sha1_len;
- md->block_size = int_sha1_block_len;
- md->reset = int_sha1_reset;
- md->update = int_sha1_update;
- md->finish = int_sha1_finish;
- md->free = int_sha1_free;
-
- md->reset(md);
-}
-
-/*
- * ciphers generally
- */
-
-#define INT_MAX_KEY (512/8)
-#define INT_MAX_IV (128/8)
-
-struct int_ctx
-{
- uint8 keybuf[INT_MAX_KEY];
- uint8 iv[INT_MAX_IV];
- union
- {
- BlowfishContext bf;
- rijndael_ctx rj;
- } ctx;
- unsigned keylen;
- int is_init;
- int mode;
-};
-
-static void
-intctx_free(PX_Cipher *c)
-{
- struct int_ctx *cx = (struct int_ctx *) c->ptr;
-
- if (cx)
- {
- memset(cx, 0, sizeof *cx);
- px_free(cx);
- }
- px_free(c);
-}
-
-/*
- * AES/rijndael
- */
-
-#define MODE_ECB 0
-#define MODE_CBC 1
-
-static unsigned
-rj_block_size(PX_Cipher *c)
-{
- return 128 / 8;
-}
-
-static unsigned
-rj_key_size(PX_Cipher *c)
-{
- return 256 / 8;
-}
-
-static unsigned
-rj_iv_size(PX_Cipher *c)
-{
- return 128 / 8;
-}
-
-static int
-rj_init(PX_Cipher *c, const uint8 *key, unsigned klen, const uint8 *iv)
-{
- struct int_ctx *cx = (struct int_ctx *) c->ptr;
-
- if (klen <= 128 / 8)
- cx->keylen = 128 / 8;
- else if (klen <= 192 / 8)
- cx->keylen = 192 / 8;
- else if (klen <= 256 / 8)
- cx->keylen = 256 / 8;
- else
- return PXE_KEY_TOO_BIG;
-
- memcpy(&cx->keybuf, key, klen);
-
- if (iv)
- memcpy(cx->iv, iv, 128 / 8);
-
- return 0;
-}
-
-static int
-rj_real_init(struct int_ctx * cx, int dir)
-{
- aes_set_key(&cx->ctx.rj, cx->keybuf, cx->keylen * 8, dir);
- return 0;
-}
-
-static int
-rj_encrypt(PX_Cipher *c, const uint8 *data, unsigned dlen, uint8 *res)
-{
- struct int_ctx *cx = (struct int_ctx *) c->ptr;
-
- if (!cx->is_init)
- {
- if (rj_real_init(cx, 1))
- return PXE_CIPHER_INIT;
- }
-
- if (dlen == 0)
- return 0;
-
- if (dlen & 15)
- return PXE_NOTBLOCKSIZE;
-
- memcpy(res, data, dlen);
-
- if (cx->mode == MODE_CBC)
- {
- aes_cbc_encrypt(&cx->ctx.rj, cx->iv, res, dlen);
- memcpy(cx->iv, res + dlen - 16, 16);
- }
- else
- aes_ecb_encrypt(&cx->ctx.rj, res, dlen);
-
- return 0;
-}
-
-static int
-rj_decrypt(PX_Cipher *c, const uint8 *data, unsigned dlen, uint8 *res)
-{
- struct int_ctx *cx = (struct int_ctx *) c->ptr;
-
- if (!cx->is_init)
- if (rj_real_init(cx, 0))
- return PXE_CIPHER_INIT;
-
- if (dlen == 0)
- return 0;
-
- if (dlen & 15)
- return PXE_NOTBLOCKSIZE;
-
- memcpy(res, data, dlen);
-
- if (cx->mode == MODE_CBC)
- {
- aes_cbc_decrypt(&cx->ctx.rj, cx->iv, res, dlen);
- memcpy(cx->iv, data + dlen - 16, 16);
- }
- else
- aes_ecb_decrypt(&cx->ctx.rj, res, dlen);
-
- return 0;
-}
-
-/*
- * initializers
- */
-
-static PX_Cipher *
-rj_load(int mode)
-{
- PX_Cipher *c;
- struct int_ctx *cx;
-
- c = px_alloc(sizeof *c);
- memset(c, 0, sizeof *c);
-
- c->block_size = rj_block_size;
- c->key_size = rj_key_size;
- c->iv_size = rj_iv_size;
- c->init = rj_init;
- c->encrypt = rj_encrypt;
- c->decrypt = rj_decrypt;
- c->free = intctx_free;
-
- cx = px_alloc(sizeof *cx);
- memset(cx, 0, sizeof *cx);
- cx->mode = mode;
-
- c->ptr = cx;
- return c;
-}
-
-/*
- * blowfish
- */
-
-static unsigned
-bf_block_size(PX_Cipher *c)
-{
- return 8;
-}
-
-static unsigned
-bf_key_size(PX_Cipher *c)
-{
- return 448 / 8;
-}
-
-static unsigned
-bf_iv_size(PX_Cipher *c)
-{
- return 8;
-}
-
-static int
-bf_init(PX_Cipher *c, const uint8 *key, unsigned klen, const uint8 *iv)
-{
- struct int_ctx *cx = (struct int_ctx *) c->ptr;
-
- blowfish_setkey(&cx->ctx.bf, key, klen);
- if (iv)
- blowfish_setiv(&cx->ctx.bf, iv);
-
- return 0;
-}
-
-static int
-bf_encrypt(PX_Cipher *c, const uint8 *data, unsigned dlen, uint8 *res)
-{
- struct int_ctx *cx = (struct int_ctx *) c->ptr;
- BlowfishContext *bfctx = &cx->ctx.bf;
-
- if (dlen == 0)
- return 0;
-
- if (dlen & 7)
- return PXE_NOTBLOCKSIZE;
-
- memcpy(res, data, dlen);
- switch (cx->mode)
- {
- case MODE_ECB:
- blowfish_encrypt_ecb(res, dlen, bfctx);
- break;
- case MODE_CBC:
- blowfish_encrypt_cbc(res, dlen, bfctx);
- break;
- }
- return 0;
-}
-
-static int
-bf_decrypt(PX_Cipher *c, const uint8 *data, unsigned dlen, uint8 *res)
-{
- struct int_ctx *cx = (struct int_ctx *) c->ptr;
- BlowfishContext *bfctx = &cx->ctx.bf;
-
- if (dlen == 0)
- return 0;
-
- if (dlen & 7)
- return PXE_NOTBLOCKSIZE;
-
- memcpy(res, data, dlen);
- switch (cx->mode)
- {
- case MODE_ECB:
- blowfish_decrypt_ecb(res, dlen, bfctx);
- break;
- case MODE_CBC:
- blowfish_decrypt_cbc(res, dlen, bfctx);
- break;
- }
- return 0;
-}
-
-static PX_Cipher *
-bf_load(int mode)
-{
- PX_Cipher *c;
- struct int_ctx *cx;
-
- c = px_alloc(sizeof *c);
- memset(c, 0, sizeof *c);
-
- c->block_size = bf_block_size;
- c->key_size = bf_key_size;
- c->iv_size = bf_iv_size;
- c->init = bf_init;
- c->encrypt = bf_encrypt;
- c->decrypt = bf_decrypt;
- c->free = intctx_free;
-
- cx = px_alloc(sizeof *cx);
- memset(cx, 0, sizeof *cx);
- cx->mode = mode;
- c->ptr = cx;
- return c;
-}
-
-/* ciphers */
-
-static PX_Cipher *
-rj_128_ecb(void)
-{
- return rj_load(MODE_ECB);
-}
-
-static PX_Cipher *
-rj_128_cbc(void)
-{
- return rj_load(MODE_CBC);
-}
-
-static PX_Cipher *
-bf_ecb_load(void)
-{
- return bf_load(MODE_ECB);
-}
-
-static PX_Cipher *
-bf_cbc_load(void)
-{
- return bf_load(MODE_CBC);
-}
-
-struct int_cipher
-{
- char *name;
- PX_Cipher *(*load) (void);
-};
-
-static const struct int_cipher
- int_ciphers[] = {
- {"bf-cbc", bf_cbc_load},
- {"bf-ecb", bf_ecb_load},
- {"aes-128-cbc", rj_128_cbc},
- {"aes-128-ecb", rj_128_ecb},
- {NULL, NULL}
-};
-
-static const PX_Alias int_aliases[] = {
- {"bf", "bf-cbc"},
- {"blowfish", "bf-cbc"},
- {"aes", "aes-128-cbc"},
- {"aes-ecb", "aes-128-ecb"},
- {"aes-cbc", "aes-128-cbc"},
- {"aes-128", "aes-128-cbc"},
- {"rijndael", "aes-128-cbc"},
- {"rijndael-128", "aes-128-cbc"},
- {NULL, NULL}
-};
-
-/* PUBLIC FUNCTIONS */
-
-int
-px_find_digest(const char *name, PX_MD **res)
-{
- const struct int_digest *p;
- PX_MD *h;
-
- for (p = int_digest_list; p->name; p++)
- {
- if (pg_strcasecmp(p->name, name) == 0)
- {
- h = px_alloc(sizeof(*h));
- p->init(h);
-
- *res = h;
-
- return 0;
- }
- }
- return PXE_NO_HASH;
-}
-
-int
-px_find_cipher(const char *name, PX_Cipher **res)
-{
- int i;
- PX_Cipher *c = NULL;
-
- name = px_resolve_alias(int_aliases, name);
-
- for (i = 0; int_ciphers[i].name; i++)
- if (!strcmp(int_ciphers[i].name, name))
- {
- c = int_ciphers[i].load();
- break;
- }
-
- if (c == NULL)
- return PXE_NO_CIPHER;
-
- *res = c;
- return 0;
-}
-
-/*
- * Randomness provider
- */
-
-/*
- * Use always strong randomness.
- */
-int
-px_get_pseudo_random_bytes(uint8 *dst, unsigned count)
-{
- return px_get_random_bytes(dst, count);
-}
-
-static time_t seed_time = 0;
-static time_t check_time = 0;
-
-static void
-system_reseed(void)
-{
- uint8 buf[1024];
- int n;
- time_t t;
- int skip = 1;
-
- t = time(NULL);
-
- if (seed_time == 0)
- skip = 0;
- else if ((t - seed_time) < SYSTEM_RESEED_MIN)
- skip = 1;
- else if ((t - seed_time) > SYSTEM_RESEED_MAX)
- skip = 0;
- else if (check_time == 0 ||
- (t - check_time) > SYSTEM_RESEED_CHECK_TIME)
- {
- check_time = t;
-
- /* roll dice */
- px_get_random_bytes(buf, 1);
- skip = buf[0] >= SYSTEM_RESEED_CHANCE;
- }
- /* clear 1 byte */
- memset(buf, 0, sizeof(buf));
-
- if (skip)
- return;
-
- n = px_acquire_system_randomness(buf);
- if (n > 0)
- fortuna_add_entropy(buf, n);
-
- seed_time = t;
- memset(buf, 0, sizeof(buf));
-}
-
-int
-px_get_random_bytes(uint8 *dst, unsigned count)
-{
- system_reseed();
- fortuna_get_bytes(count, dst);
- return 0;
-}
-
-int
-px_add_entropy(const uint8 *data, unsigned count)
-{
- system_reseed();
- fortuna_add_entropy(data, count);
- return 0;
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/mbuf.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/mbuf.c b/contrib/pgcrypto/mbuf.c
deleted file mode 100644
index d3eee2e..0000000
--- a/contrib/pgcrypto/mbuf.c
+++ /dev/null
@@ -1,563 +0,0 @@
-/*
- * mbuf.c
- * Memory buffer operations.
- *
- * Copyright (c) 2005 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/mbuf.c,v 1.5 2009/06/11 14:48:52 momjian Exp $
- */
-
-#include "postgres.h"
-
-#include "px.h"
-#include "mbuf.h"
-
-#define STEP (16*1024)
-
-struct MBuf
-{
- uint8 *data;
- uint8 *data_end;
- uint8 *read_pos;
- uint8 *buf_end;
- bool no_write;
- bool own_data;
-};
-
-int
-mbuf_avail(MBuf *mbuf)
-{
- return mbuf->data_end - mbuf->read_pos;
-}
-
-int
-mbuf_size(MBuf *mbuf)
-{
- return mbuf->data_end - mbuf->data;
-}
-
-int
-mbuf_tell(MBuf *mbuf)
-{
- return mbuf->read_pos - mbuf->data;
-}
-
-int
-mbuf_free(MBuf *mbuf)
-{
- if (mbuf->own_data)
- {
- memset(mbuf->data, 0, mbuf->buf_end - mbuf->data);
- px_free(mbuf->data);
- }
- px_free(mbuf);
- return 0;
-}
-
-static void
-prepare_room(MBuf *mbuf, int block_len)
-{
- uint8 *newbuf;
- unsigned newlen;
-
- if (mbuf->data_end + block_len <= mbuf->buf_end)
- return;
-
- newlen = (mbuf->buf_end - mbuf->data)
- + ((block_len + STEP + STEP - 1) & -STEP);
-
- newbuf = px_realloc(mbuf->data, newlen);
-
- mbuf->buf_end = newbuf + newlen;
- mbuf->data_end = newbuf + (mbuf->data_end - mbuf->data);
- mbuf->read_pos = newbuf + (mbuf->read_pos - mbuf->data);
- mbuf->data = newbuf;
-
- return;
-}
-
-int
-mbuf_append(MBuf *dst, const uint8 *buf, int len)
-{
- if (dst->no_write)
- {
- px_debug("mbuf_append: no_write");
- return PXE_BUG;
- }
-
- prepare_room(dst, len);
-
- memcpy(dst->data_end, buf, len);
- dst->data_end += len;
-
- return 0;
-}
-
-MBuf *
-mbuf_create(int len)
-{
- MBuf *mbuf;
-
- if (!len)
- len = 8192;
-
- mbuf = px_alloc(sizeof *mbuf);
- mbuf->data = px_alloc(len);
- mbuf->buf_end = mbuf->data + len;
- mbuf->data_end = mbuf->data;
- mbuf->read_pos = mbuf->data;
-
- mbuf->no_write = false;
- mbuf->own_data = true;
-
- return mbuf;
-}
-
-MBuf *
-mbuf_create_from_data(const uint8 *data, int len)
-{
- MBuf *mbuf;
-
- mbuf = px_alloc(sizeof *mbuf);
- mbuf->data = (uint8 *) data;
- mbuf->buf_end = mbuf->data + len;
- mbuf->data_end = mbuf->data + len;
- mbuf->read_pos = mbuf->data;
-
- mbuf->no_write = true;
- mbuf->own_data = false;
-
- return mbuf;
-}
-
-
-int
-mbuf_grab(MBuf *mbuf, int len, uint8 **data_p)
-{
- if (len > mbuf_avail(mbuf))
- len = mbuf_avail(mbuf);
-
- mbuf->no_write = true;
-
- *data_p = mbuf->read_pos;
- mbuf->read_pos += len;
- return len;
-}
-
-int
-mbuf_rewind(MBuf *mbuf)
-{
- mbuf->read_pos = mbuf->data;
- return 0;
-}
-
-int
-mbuf_steal_data(MBuf *mbuf, uint8 **data_p)
-{
- int len = mbuf_size(mbuf);
-
- mbuf->no_write = true;
- mbuf->own_data = false;
-
- *data_p = mbuf->data;
-
- mbuf->data = mbuf->data_end = mbuf->read_pos = mbuf->buf_end = NULL;
-
- return len;
-}
-
-/*
- * PullFilter
- */
-
-struct PullFilter
-{
- PullFilter *src;
- const PullFilterOps *op;
- int buflen;
- uint8 *buf;
- int pos;
- void *priv;
-};
-
-int
-pullf_create(PullFilter **pf_p, const PullFilterOps *op, void *init_arg, PullFilter *src)
-{
- PullFilter *pf;
- void *priv;
- int res;
-
- if (op->init != NULL)
- {
- res = op->init(&priv, init_arg, src);
- if (res < 0)
- return res;
- }
- else
- {
- priv = init_arg;
- res = 0;
- }
-
- pf = px_alloc(sizeof(*pf));
- memset(pf, 0, sizeof(*pf));
- pf->buflen = res;
- pf->op = op;
- pf->priv = priv;
- pf->src = src;
- if (pf->buflen > 0)
- {
- pf->buf = px_alloc(pf->buflen);
- pf->pos = 0;
- }
- else
- {
- pf->buf = NULL;
- pf->pos = 0;
- }
- *pf_p = pf;
- return 0;
-}
-
-void
-pullf_free(PullFilter *pf)
-{
- if (pf->op->free)
- pf->op->free(pf->priv);
-
- if (pf->buf)
- {
- memset(pf->buf, 0, pf->buflen);
- px_free(pf->buf);
- }
-
- memset(pf, 0, sizeof(*pf));
- px_free(pf);
-}
-
-/* may return less data than asked, 0 means eof */
-int
-pullf_read(PullFilter *pf, int len, uint8 **data_p)
-{
- int res;
-
- if (pf->op->pull)
- {
- if (pf->buflen && len > pf->buflen)
- len = pf->buflen;
- res = pf->op->pull(pf->priv, pf->src, len, data_p,
- pf->buf, pf->buflen);
- }
- else
- res = pullf_read(pf->src, len, data_p);
- return res;
-}
-
-int
-pullf_read_max(PullFilter *pf, int len, uint8 **data_p, uint8 *tmpbuf)
-{
- int res,
- total;
- uint8 *tmp;
-
- res = pullf_read(pf, len, data_p);
- if (res <= 0 || res == len)
- return res;
-
- /* read was shorter, use tmpbuf */
- memcpy(tmpbuf, *data_p, res);
- *data_p = tmpbuf;
- len -= res;
- total = res;
-
- while (len > 0)
- {
- res = pullf_read(pf, len, &tmp);
- if (res < 0)
- {
- /* so the caller must clear only on success */
- memset(tmpbuf, 0, total);
- return res;
- }
- if (res == 0)
- break;
- memcpy(tmpbuf + total, tmp, res);
- total += res;
- }
- return total;
-}
-
-/*
- * caller wants exatly len bytes and dont bother with references
- */
-int
-pullf_read_fixed(PullFilter *src, int len, uint8 *dst)
-{
- int res;
- uint8 *p;
-
- res = pullf_read_max(src, len, &p, dst);
- if (res < 0)
- return res;
- if (res != len)
- {
- px_debug("pullf_read_fixed: need=%d got=%d", len, res);
- return PXE_MBUF_SHORT_READ;
- }
- if (p != dst)
- memcpy(dst, p, len);
- return 0;
-}
-
-/*
- * read from MBuf
- */
-static int
-pull_from_mbuf(void *arg, PullFilter *src, int len,
- uint8 **data_p, uint8 *buf, int buflen)
-{
- MBuf *mbuf = arg;
-
- return mbuf_grab(mbuf, len, data_p);
-}
-
-static const struct PullFilterOps mbuf_reader = {
- NULL, pull_from_mbuf, NULL
-};
-
-int
-pullf_create_mbuf_reader(PullFilter **mp_p, MBuf *src)
-{
- return pullf_create(mp_p, &mbuf_reader, src, NULL);
-}
-
-
-/*
- * PushFilter
- */
-
-struct PushFilter
-{
- PushFilter *next;
- const PushFilterOps *op;
- int block_size;
- uint8 *buf;
- int pos;
- void *priv;
-};
-
-int
-pushf_create(PushFilter **mp_p, const PushFilterOps *op, void *init_arg, PushFilter *next)
-{
- PushFilter *mp;
- void *priv;
- int res;
-
- if (op->init != NULL)
- {
- res = op->init(next, init_arg, &priv);
- if (res < 0)
- return res;
- }
- else
- {
- priv = init_arg;
- res = 0;
- }
-
- mp = px_alloc(sizeof(*mp));
- memset(mp, 0, sizeof(*mp));
- mp->block_size = res;
- mp->op = op;
- mp->priv = priv;
- mp->next = next;
- if (mp->block_size > 0)
- {
- mp->buf = px_alloc(mp->block_size);
- mp->pos = 0;
- }
- else
- {
- mp->buf = NULL;
- mp->pos = 0;
- }
- *mp_p = mp;
- return 0;
-}
-
-void
-pushf_free(PushFilter *mp)
-{
- if (mp->op->free)
- mp->op->free(mp->priv);
-
- if (mp->buf)
- {
- memset(mp->buf, 0, mp->block_size);
- px_free(mp->buf);
- }
-
- memset(mp, 0, sizeof(*mp));
- px_free(mp);
-}
-
-void
-pushf_free_all(PushFilter *mp)
-{
- PushFilter *tmp;
-
- while (mp)
- {
- tmp = mp->next;
- pushf_free(mp);
- mp = tmp;
- }
-}
-
-static int
-wrap_process(PushFilter *mp, const uint8 *data, int len)
-{
- int res;
-
- if (mp->op->push != NULL)
- res = mp->op->push(mp->next, mp->priv, data, len);
- else
- res = pushf_write(mp->next, data, len);
- if (res > 0)
- return PXE_BUG;
- return res;
-}
-
-/* consumes all data, returns len on success */
-int
-pushf_write(PushFilter *mp, const uint8 *data, int len)
-{
- int need,
- res;
-
- /*
- * no buffering
- */
- if (mp->block_size <= 0)
- return wrap_process(mp, data, len);
-
- /*
- * try to empty buffer
- */
- need = mp->block_size - mp->pos;
- if (need > 0)
- {
- if (len < need)
- {
- memcpy(mp->buf + mp->pos, data, len);
- mp->pos += len;
- return 0;
- }
- memcpy(mp->buf + mp->pos, data, need);
- len -= need;
- data += need;
- }
-
- /*
- * buffer full, process
- */
- res = wrap_process(mp, mp->buf, mp->block_size);
- if (res < 0)
- return res;
- mp->pos = 0;
-
- /*
- * now process directly from data
- */
- while (len > 0)
- {
- if (len > mp->block_size)
- {
- res = wrap_process(mp, data, mp->block_size);
- if (res < 0)
- return res;
- data += mp->block_size;
- len -= mp->block_size;
- }
- else
- {
- memcpy(mp->buf, data, len);
- mp->pos += len;
- break;
- }
- }
- return 0;
-}
-
-int
-pushf_flush(PushFilter *mp)
-{
- int res;
-
- while (mp)
- {
- if (mp->block_size > 0)
- {
- res = wrap_process(mp, mp->buf, mp->pos);
- if (res < 0)
- return res;
- }
-
- if (mp->op->flush)
- {
- res = mp->op->flush(mp->next, mp->priv);
- if (res < 0)
- return res;
- }
-
- mp = mp->next;
- }
- return 0;
-}
-
-
-/*
- * write to MBuf
- */
-static int
-push_into_mbuf(PushFilter *next, void *arg, const uint8 *data, int len)
-{
- int res = 0;
- MBuf *mbuf = arg;
-
- if (len > 0)
- res = mbuf_append(mbuf, data, len);
- return res < 0 ? res : 0;
-}
-
-static const struct PushFilterOps mbuf_filter = {
- NULL, push_into_mbuf, NULL, NULL
-};
-
-int
-pushf_create_mbuf_writer(PushFilter **res, MBuf *dst)
-{
- return pushf_create(res, &mbuf_filter, dst, NULL);
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/mbuf.h
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/mbuf.h b/contrib/pgcrypto/mbuf.h
deleted file mode 100644
index aa2b559..0000000
--- a/contrib/pgcrypto/mbuf.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * mbuf.h
- * Memory buffer operations.
- *
- * Copyright (c) 2005 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/mbuf.h,v 1.3 2009/06/11 14:48:52 momjian Exp $
- */
-
-#ifndef __PX_MBUF_H
-#define __PX_MBUF_H
-
-typedef struct MBuf MBuf;
-typedef struct PushFilter PushFilter;
-typedef struct PullFilter PullFilter;
-typedef struct PushFilterOps PushFilterOps;
-typedef struct PullFilterOps PullFilterOps;
-
-struct PushFilterOps
-{
- /*
- * should return needed buffer size, 0- no buffering, <0 on error if NULL,
- * no buffering, and priv=init_arg
- */
- int (*init) (PushFilter *next, void *init_arg, void **priv_p);
-
- /*
- * send data to next. should consume all? if null, it will be simply
- * copied (in-place) returns 0 on error
- */
- int (*push) (PushFilter *next, void *priv,
- const uint8 *src, int len);
- int (*flush) (PushFilter *next, void *priv);
- void (*free) (void *priv);
-};
-
-struct PullFilterOps
-{
- /*
- * should return needed buffer size, 0- no buffering, <0 on error if NULL,
- * no buffering, and priv=init_arg
- */
- int (*init) (void **priv_p, void *init_arg, PullFilter *src);
-
- /*
- * request data from src, put result ptr to data_p can use ptr from src or
- * use buf as work area if NULL in-place copy
- */
- int (*pull) (void *priv, PullFilter *src, int len,
- uint8 **data_p, uint8 *buf, int buflen);
- void (*free) (void *priv);
-};
-
-/*
- * Memory buffer
- */
-MBuf *mbuf_create(int len);
-MBuf *mbuf_create_from_data(const uint8 *data, int len);
-int mbuf_tell(MBuf *mbuf);
-int mbuf_avail(MBuf *mbuf);
-int mbuf_size(MBuf *mbuf);
-int mbuf_grab(MBuf *mbuf, int len, uint8 **data_p);
-int mbuf_steal_data(MBuf *mbuf, uint8 **data_p);
-int mbuf_append(MBuf *dst, const uint8 *buf, int cnt);
-int mbuf_rewind(MBuf *mbuf);
-int mbuf_free(MBuf *mbuf);
-
-/*
- * Push filter
- */
-int pushf_create(PushFilter **res, const PushFilterOps *ops, void *init_arg,
- PushFilter *next);
-int pushf_write(PushFilter *mp, const uint8 *data, int len);
-void pushf_free_all(PushFilter *mp);
-void pushf_free(PushFilter *mp);
-int pushf_flush(PushFilter *mp);
-
-int pushf_create_mbuf_writer(PushFilter **mp_p, MBuf *mbuf);
-
-/*
- * Pull filter
- */
-int pullf_create(PullFilter **res, const PullFilterOps *ops,
- void *init_arg, PullFilter *src);
-int pullf_read(PullFilter *mp, int len, uint8 **data_p);
-int pullf_read_max(PullFilter *mp, int len,
- uint8 **data_p, uint8 *tmpbuf);
-void pullf_free(PullFilter *mp);
-int pullf_read_fixed(PullFilter *src, int len, uint8 *dst);
-
-int pullf_create_mbuf_reader(PullFilter **pf_p, MBuf *mbuf);
-
-#define GETBYTE(pf, dst) \
- do { \
- uint8 __b; \
- int __res = pullf_read_fixed(pf, 1, &__b); \
- if (__res < 0) \
- return __res; \
- (dst) = __b; \
- } while (0)
-
-#endif /* __PX_MBUF_H */
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/md5.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/md5.c b/contrib/pgcrypto/md5.c
deleted file mode 100644
index 8083d1f..0000000
--- a/contrib/pgcrypto/md5.c
+++ /dev/null
@@ -1,398 +0,0 @@
-/* $KAME: md5.c,v 1.3 2000/02/22 14:01:17 itojun Exp $ */
-
-/*
- * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/md5.c,v 1.15 2009/06/11 14:48:52 momjian Exp $
- */
-
-#include "postgres.h"
-
-#include <sys/param.h>
-
-#include "px.h"
-#include "md5.h"
-
-#define SHIFT(X, s) (((X) << (s)) | ((X) >> (32 - (s))))
-
-#define F(X, Y, Z) (((X) & (Y)) | ((~X) & (Z)))
-#define G(X, Y, Z) (((X) & (Z)) | ((Y) & (~Z)))
-#define H(X, Y, Z) ((X) ^ (Y) ^ (Z))
-#define I(X, Y, Z) ((Y) ^ ((X) | (~Z)))
-
-#define ROUND1(a, b, c, d, k, s, i) \
-do { \
- (a) = (a) + F((b), (c), (d)) + X[(k)] + T[(i)]; \
- (a) = SHIFT((a), (s)); \
- (a) = (b) + (a); \
-} while (0)
-
-#define ROUND2(a, b, c, d, k, s, i) \
-do { \
- (a) = (a) + G((b), (c), (d)) + X[(k)] + T[(i)]; \
- (a) = SHIFT((a), (s)); \
- (a) = (b) + (a); \
-} while (0)
-
-#define ROUND3(a, b, c, d, k, s, i) \
-do { \
- (a) = (a) + H((b), (c), (d)) + X[(k)] + T[(i)]; \
- (a) = SHIFT((a), (s)); \
- (a) = (b) + (a); \
-} while (0)
-
-#define ROUND4(a, b, c, d, k, s, i) \
-do { \
- (a) = (a) + I((b), (c), (d)) + X[(k)] + T[(i)]; \
- (a) = SHIFT((a), (s)); \
- (a) = (b) + (a); \
-} while (0)
-
-#define Sa 7
-#define Sb 12
-#define Sc 17
-#define Sd 22
-
-#define Se 5
-#define Sf 9
-#define Sg 14
-#define Sh 20
-
-#define Si 4
-#define Sj 11
-#define Sk 16
-#define Sl 23
-
-#define Sm 6
-#define Sn 10
-#define So 15
-#define Sp 21
-
-#define MD5_A0 0x67452301
-#define MD5_B0 0xefcdab89
-#define MD5_C0 0x98badcfe
-#define MD5_D0 0x10325476
-
-/* Integer part of 4294967296 times abs(sin(i)), where i is in radians. */
-static const uint32 T[65] = {
- 0,
- 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee,
- 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501,
- 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be,
- 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821,
-
- 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa,
- 0xd62f105d, 0x2441453, 0xd8a1e681, 0xe7d3fbc8,
- 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed,
- 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a,
-
- 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c,
- 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70,
- 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x4881d05,
- 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665,
-
- 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039,
- 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1,
- 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1,
- 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391,
-};
-
-static const uint8 md5_paddat[MD5_BUFLEN] = {
- 0x80, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static void md5_calc(uint8 *, md5_ctxt *);
-
-void
-md5_init(md5_ctxt *ctxt)
-{
- ctxt->md5_n = 0;
- ctxt->md5_i = 0;
- ctxt->md5_sta = MD5_A0;
- ctxt->md5_stb = MD5_B0;
- ctxt->md5_stc = MD5_C0;
- ctxt->md5_std = MD5_D0;
- memset(ctxt->md5_buf, 0, sizeof(ctxt->md5_buf));
-}
-
-void
-md5_loop(md5_ctxt *ctxt, const uint8 *input, unsigned len)
-{
- unsigned int gap,
- i;
-
- ctxt->md5_n += len * 8; /* byte to bit */
- gap = MD5_BUFLEN - ctxt->md5_i;
-
- if (len >= gap)
- {
- memmove(ctxt->md5_buf + ctxt->md5_i, input, gap);
- md5_calc(ctxt->md5_buf, ctxt);
-
- for (i = gap; i + MD5_BUFLEN <= len; i += MD5_BUFLEN)
- md5_calc((uint8 *) (input + i), ctxt);
-
- ctxt->md5_i = len - i;
- memmove(ctxt->md5_buf, input + i, ctxt->md5_i);
- }
- else
- {
- memmove(ctxt->md5_buf + ctxt->md5_i, input, len);
- ctxt->md5_i += len;
- }
-}
-
-void
-md5_pad(md5_ctxt *ctxt)
-{
- unsigned int gap;
-
- /* Don't count up padding. Keep md5_n. */
- gap = MD5_BUFLEN - ctxt->md5_i;
- if (gap > 8)
- {
- memmove(ctxt->md5_buf + ctxt->md5_i, md5_paddat,
- gap - sizeof(ctxt->md5_n));
- }
- else
- {
- /* including gap == 8 */
- memmove(ctxt->md5_buf + ctxt->md5_i, md5_paddat, gap);
- md5_calc(ctxt->md5_buf, ctxt);
- memmove(ctxt->md5_buf, md5_paddat + gap,
- MD5_BUFLEN - sizeof(ctxt->md5_n));
- }
-
- /* 8 byte word */
-#ifndef WORDS_BIGENDIAN
- memmove(&ctxt->md5_buf[56], &ctxt->md5_n8[0], 8);
-#else
- ctxt->md5_buf[56] = ctxt->md5_n8[7];
- ctxt->md5_buf[57] = ctxt->md5_n8[6];
- ctxt->md5_buf[58] = ctxt->md5_n8[5];
- ctxt->md5_buf[59] = ctxt->md5_n8[4];
- ctxt->md5_buf[60] = ctxt->md5_n8[3];
- ctxt->md5_buf[61] = ctxt->md5_n8[2];
- ctxt->md5_buf[62] = ctxt->md5_n8[1];
- ctxt->md5_buf[63] = ctxt->md5_n8[0];
-#endif
-
- md5_calc(ctxt->md5_buf, ctxt);
-}
-
-void
-md5_result(uint8 *digest, md5_ctxt *ctxt)
-{
- /* 4 byte words */
-#ifndef WORDS_BIGENDIAN
- memmove(digest, &ctxt->md5_st8[0], 16);
-#else
- digest[0] = ctxt->md5_st8[3];
- digest[1] = ctxt->md5_st8[2];
- digest[2] = ctxt->md5_st8[1];
- digest[3] = ctxt->md5_st8[0];
- digest[4] = ctxt->md5_st8[7];
- digest[5] = ctxt->md5_st8[6];
- digest[6] = ctxt->md5_st8[5];
- digest[7] = ctxt->md5_st8[4];
- digest[8] = ctxt->md5_st8[11];
- digest[9] = ctxt->md5_st8[10];
- digest[10] = ctxt->md5_st8[9];
- digest[11] = ctxt->md5_st8[8];
- digest[12] = ctxt->md5_st8[15];
- digest[13] = ctxt->md5_st8[14];
- digest[14] = ctxt->md5_st8[13];
- digest[15] = ctxt->md5_st8[12];
-#endif
-}
-
-#ifdef WORDS_BIGENDIAN
-static uint32 X[16];
-#endif
-
-static void
-md5_calc(uint8 *b64, md5_ctxt *ctxt)
-{
- uint32 A = ctxt->md5_sta;
- uint32 B = ctxt->md5_stb;
- uint32 C = ctxt->md5_stc;
- uint32 D = ctxt->md5_std;
-
-#ifndef WORDS_BIGENDIAN
- uint32 *X = (uint32 *) b64;
-#else
- /* 4 byte words */
- /* what a brute force but fast! */
- uint8 *y = (uint8 *) X;
-
- y[0] = b64[3];
- y[1] = b64[2];
- y[2] = b64[1];
- y[3] = b64[0];
- y[4] = b64[7];
- y[5] = b64[6];
- y[6] = b64[5];
- y[7] = b64[4];
- y[8] = b64[11];
- y[9] = b64[10];
- y[10] = b64[9];
- y[11] = b64[8];
- y[12] = b64[15];
- y[13] = b64[14];
- y[14] = b64[13];
- y[15] = b64[12];
- y[16] = b64[19];
- y[17] = b64[18];
- y[18] = b64[17];
- y[19] = b64[16];
- y[20] = b64[23];
- y[21] = b64[22];
- y[22] = b64[21];
- y[23] = b64[20];
- y[24] = b64[27];
- y[25] = b64[26];
- y[26] = b64[25];
- y[27] = b64[24];
- y[28] = b64[31];
- y[29] = b64[30];
- y[30] = b64[29];
- y[31] = b64[28];
- y[32] = b64[35];
- y[33] = b64[34];
- y[34] = b64[33];
- y[35] = b64[32];
- y[36] = b64[39];
- y[37] = b64[38];
- y[38] = b64[37];
- y[39] = b64[36];
- y[40] = b64[43];
- y[41] = b64[42];
- y[42] = b64[41];
- y[43] = b64[40];
- y[44] = b64[47];
- y[45] = b64[46];
- y[46] = b64[45];
- y[47] = b64[44];
- y[48] = b64[51];
- y[49] = b64[50];
- y[50] = b64[49];
- y[51] = b64[48];
- y[52] = b64[55];
- y[53] = b64[54];
- y[54] = b64[53];
- y[55] = b64[52];
- y[56] = b64[59];
- y[57] = b64[58];
- y[58] = b64[57];
- y[59] = b64[56];
- y[60] = b64[63];
- y[61] = b64[62];
- y[62] = b64[61];
- y[63] = b64[60];
-#endif
-
- ROUND1(A, B, C, D, 0, Sa, 1);
- ROUND1(D, A, B, C, 1, Sb, 2);
- ROUND1(C, D, A, B, 2, Sc, 3);
- ROUND1(B, C, D, A, 3, Sd, 4);
- ROUND1(A, B, C, D, 4, Sa, 5);
- ROUND1(D, A, B, C, 5, Sb, 6);
- ROUND1(C, D, A, B, 6, Sc, 7);
- ROUND1(B, C, D, A, 7, Sd, 8);
- ROUND1(A, B, C, D, 8, Sa, 9);
- ROUND1(D, A, B, C, 9, Sb, 10);
- ROUND1(C, D, A, B, 10, Sc, 11);
- ROUND1(B, C, D, A, 11, Sd, 12);
- ROUND1(A, B, C, D, 12, Sa, 13);
- ROUND1(D, A, B, C, 13, Sb, 14);
- ROUND1(C, D, A, B, 14, Sc, 15);
- ROUND1(B, C, D, A, 15, Sd, 16);
-
- ROUND2(A, B, C, D, 1, Se, 17);
- ROUND2(D, A, B, C, 6, Sf, 18);
- ROUND2(C, D, A, B, 11, Sg, 19);
- ROUND2(B, C, D, A, 0, Sh, 20);
- ROUND2(A, B, C, D, 5, Se, 21);
- ROUND2(D, A, B, C, 10, Sf, 22);
- ROUND2(C, D, A, B, 15, Sg, 23);
- ROUND2(B, C, D, A, 4, Sh, 24);
- ROUND2(A, B, C, D, 9, Se, 25);
- ROUND2(D, A, B, C, 14, Sf, 26);
- ROUND2(C, D, A, B, 3, Sg, 27);
- ROUND2(B, C, D, A, 8, Sh, 28);
- ROUND2(A, B, C, D, 13, Se, 29);
- ROUND2(D, A, B, C, 2, Sf, 30);
- ROUND2(C, D, A, B, 7, Sg, 31);
- ROUND2(B, C, D, A, 12, Sh, 32);
-
- ROUND3(A, B, C, D, 5, Si, 33);
- ROUND3(D, A, B, C, 8, Sj, 34);
- ROUND3(C, D, A, B, 11, Sk, 35);
- ROUND3(B, C, D, A, 14, Sl, 36);
- ROUND3(A, B, C, D, 1, Si, 37);
- ROUND3(D, A, B, C, 4, Sj, 38);
- ROUND3(C, D, A, B, 7, Sk, 39);
- ROUND3(B, C, D, A, 10, Sl, 40);
- ROUND3(A, B, C, D, 13, Si, 41);
- ROUND3(D, A, B, C, 0, Sj, 42);
- ROUND3(C, D, A, B, 3, Sk, 43);
- ROUND3(B, C, D, A, 6, Sl, 44);
- ROUND3(A, B, C, D, 9, Si, 45);
- ROUND3(D, A, B, C, 12, Sj, 46);
- ROUND3(C, D, A, B, 15, Sk, 47);
- ROUND3(B, C, D, A, 2, Sl, 48);
-
- ROUND4(A, B, C, D, 0, Sm, 49);
- ROUND4(D, A, B, C, 7, Sn, 50);
- ROUND4(C, D, A, B, 14, So, 51);
- ROUND4(B, C, D, A, 5, Sp, 52);
- ROUND4(A, B, C, D, 12, Sm, 53);
- ROUND4(D, A, B, C, 3, Sn, 54);
- ROUND4(C, D, A, B, 10, So, 55);
- ROUND4(B, C, D, A, 1, Sp, 56);
- ROUND4(A, B, C, D, 8, Sm, 57);
- ROUND4(D, A, B, C, 15, Sn, 58);
- ROUND4(C, D, A, B, 6, So, 59);
- ROUND4(B, C, D, A, 13, Sp, 60);
- ROUND4(A, B, C, D, 4, Sm, 61);
- ROUND4(D, A, B, C, 11, Sn, 62);
- ROUND4(C, D, A, B, 2, So, 63);
- ROUND4(B, C, D, A, 9, Sp, 64);
-
- ctxt->md5_sta += A;
- ctxt->md5_stb += B;
- ctxt->md5_stc += C;
- ctxt->md5_std += D;
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/md5.h
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/md5.h b/contrib/pgcrypto/md5.h
deleted file mode 100644
index eb7c620..0000000
--- a/contrib/pgcrypto/md5.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/pgcrypto/md5.h,v 1.10 2009/06/11 14:48:52 momjian Exp $ */
-/* $KAME: md5.h,v 1.3 2000/02/22 14:01:18 itojun Exp $ */
-
-/*
- * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _NETINET6_MD5_H_
-#define _NETINET6_MD5_H_
-
-#define MD5_BUFLEN 64
-
-typedef struct
-{
- union
- {
- uint32 md5_state32[4];
- uint8 md5_state8[16];
- } md5_st;
-
-#define md5_sta md5_st.md5_state32[0]
-#define md5_stb md5_st.md5_state32[1]
-#define md5_stc md5_st.md5_state32[2]
-#define md5_std md5_st.md5_state32[3]
-#define md5_st8 md5_st.md5_state8
-
- union
- {
- uint64 md5_count64;
- uint8 md5_count8[8];
- } md5_count;
-#define md5_n md5_count.md5_count64
-#define md5_n8 md5_count.md5_count8
-
- unsigned int md5_i;
- uint8 md5_buf[MD5_BUFLEN];
-} md5_ctxt;
-
-extern void md5_init(md5_ctxt *);
-extern void md5_loop(md5_ctxt *, const uint8 *, unsigned int);
-extern void md5_pad(md5_ctxt *);
-extern void md5_result(uint8 *, md5_ctxt *);
-
-/* compatibility */
-#define MD5_CTX md5_ctxt
-#define MD5Init(x) md5_init((x))
-#define MD5Update(x, y, z) md5_loop((x), (y), (z))
-#define MD5Final(x, y) \
-do { \
- md5_pad((y)); \
- md5_result((x), (y)); \
-} while (0)
-
-#endif /* ! _NETINET6_MD5_H_ */
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/openssl.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/openssl.c b/contrib/pgcrypto/openssl.c
deleted file mode 100644
index 54ac7c4..0000000
--- a/contrib/pgcrypto/openssl.c
+++ /dev/null
@@ -1,1036 +0,0 @@
-/*
- * openssl.c
- * Wrapper for OpenSSL library.
- *
- * Copyright (c) 2001 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/openssl.c,v 1.33 2009/06/11 14:48:52 momjian Exp $
- */
-
-#include "postgres.h"
-
-#include "px.h"
-
-#include <openssl/evp.h>
-#include <openssl/blowfish.h>
-#include <openssl/cast.h>
-#include <openssl/des.h>
-#include <openssl/rand.h>
-#include <openssl/err.h>
-
-#include "postmaster/postmaster.h"
-
-/*
- * Max lengths we might want to handle.
- */
-#define MAX_KEY (512/8)
-#define MAX_IV (128/8)
-
-/*
- * Compatibility with OpenSSL 0.9.6
- *
- * It needs AES and newer DES and digest API.
- */
-#if OPENSSL_VERSION_NUMBER >= 0x00907000L
-
-/*
- * Nothing needed for OpenSSL 0.9.7+
- */
-
-#include <openssl/aes.h>
-#else /* old OPENSSL */
-
-/*
- * Emulate OpenSSL AES.
- */
-
-#include "rijndael.c"
-
-#define AES_ENCRYPT 1
-#define AES_DECRYPT 0
-#define AES_KEY rijndael_ctx
-
-static int
-AES_set_encrypt_key(const uint8 *key, int kbits, AES_KEY *ctx)
-{
- aes_set_key(ctx, key, kbits, 1);
- return 0;
-}
-
-static int
-AES_set_decrypt_key(const uint8 *key, int kbits, AES_KEY *ctx)
-{
- aes_set_key(ctx, key, kbits, 0);
- return 0;
-}
-
-static void
-AES_ecb_encrypt(const uint8 *src, uint8 *dst, AES_KEY *ctx, int enc)
-{
- memcpy(dst, src, 16);
- if (enc)
- aes_ecb_encrypt(ctx, dst, 16);
- else
- aes_ecb_decrypt(ctx, dst, 16);
-}
-
-static void
-AES_cbc_encrypt(const uint8 *src, uint8 *dst, int len, AES_KEY *ctx, uint8 *iv, int enc)
-{
- memcpy(dst, src, len);
- if (enc)
- {
- aes_cbc_encrypt(ctx, iv, dst, len);
- memcpy(iv, dst + len - 16, 16);
- }
- else
- {
- aes_cbc_decrypt(ctx, iv, dst, len);
- memcpy(iv, src + len - 16, 16);
- }
-}
-
-/*
- * Emulate DES_* API
- */
-
-#define DES_key_schedule des_key_schedule
-#define DES_cblock des_cblock
-#define DES_set_key(k, ks) \
- des_set_key((k), *(ks))
-#define DES_ecb_encrypt(i, o, k, e) \
- des_ecb_encrypt((i), (o), *(k), (e))
-#define DES_ncbc_encrypt(i, o, l, k, iv, e) \
- des_ncbc_encrypt((i), (o), (l), *(k), (iv), (e))
-#define DES_ecb3_encrypt(i, o, k1, k2, k3, e) \
- des_ecb3_encrypt((des_cblock *)(i), (des_cblock *)(o), \
- *(k1), *(k2), *(k3), (e))
-#define DES_ede3_cbc_encrypt(i, o, l, k1, k2, k3, iv, e) \
- des_ede3_cbc_encrypt((i), (o), \
- (l), *(k1), *(k2), *(k3), (iv), (e))
-
-/*
- * Emulate newer digest API.
- */
-
-static void
-EVP_MD_CTX_init(EVP_MD_CTX *ctx)
-{
- memset(ctx, 0, sizeof(*ctx));
-}
-
-static int
-EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx)
-{
- memset(ctx, 0, sizeof(*ctx));
- return 1;
-}
-
-static int
-EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *md, void *engine)
-{
- EVP_DigestInit(ctx, md);
- return 1;
-}
-
-static int
-EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *res, unsigned int *len)
-{
- EVP_DigestFinal(ctx, res, len);
- return 1;
-}
-#endif /* old OpenSSL */
-
-/*
- * Provide SHA2 for older OpenSSL < 0.9.8
- */
-#if OPENSSL_VERSION_NUMBER < 0x00908000L
-
-#include "sha2.c"
-#include "internal-sha2.c"
-
-typedef void (*init_f) (PX_MD *md);
-
-static int
-compat_find_digest(const char *name, PX_MD **res)
-{
- init_f init = NULL;
-
- if (pg_strcasecmp(name, "sha224") == 0)
- init = init_sha224;
- else if (pg_strcasecmp(name, "sha256") == 0)
- init = init_sha256;
- else if (pg_strcasecmp(name, "sha384") == 0)
- init = init_sha384;
- else if (pg_strcasecmp(name, "sha512") == 0)
- init = init_sha512;
- else
- return PXE_NO_HASH;
-
- *res = px_alloc(sizeof(PX_MD));
- init(*res);
- return 0;
-}
-#else
-#define compat_find_digest(name, res) (PXE_NO_HASH)
-#endif
-
-/*
- * Hashes
- */
-
-typedef struct OSSLDigest
-{
- const EVP_MD *algo;
- EVP_MD_CTX ctx;
-} OSSLDigest;
-
-static unsigned
-digest_result_size(PX_MD *h)
-{
- OSSLDigest *digest = (OSSLDigest *) h->p.ptr;
-
- return EVP_MD_CTX_size(&digest->ctx);
-}
-
-static unsigned
-digest_block_size(PX_MD *h)
-{
- OSSLDigest *digest = (OSSLDigest *) h->p.ptr;
-
- return EVP_MD_CTX_block_size(&digest->ctx);
-}
-
-static void
-digest_reset(PX_MD *h)
-{
- OSSLDigest *digest = (OSSLDigest *) h->p.ptr;
-
- EVP_DigestInit_ex(&digest->ctx, digest->algo, NULL);
-}
-
-static void
-digest_update(PX_MD *h, const uint8 *data, unsigned dlen)
-{
- OSSLDigest *digest = (OSSLDigest *) h->p.ptr;
-
- EVP_DigestUpdate(&digest->ctx, data, dlen);
-}
-
-static void
-digest_finish(PX_MD *h, uint8 *dst)
-{
- OSSLDigest *digest = (OSSLDigest *) h->p.ptr;
-
- EVP_DigestFinal_ex(&digest->ctx, dst, NULL);
-}
-
-static void
-digest_free(PX_MD *h)
-{
- OSSLDigest *digest = (OSSLDigest *) h->p.ptr;
-
- EVP_MD_CTX_cleanup(&digest->ctx);
-
- px_free(digest);
- px_free(h);
-}
-
-static int px_openssl_initialized = 0;
-
-/* PUBLIC functions */
-
-int
-px_find_digest(const char *name, PX_MD **res)
-{
- const EVP_MD *md;
- PX_MD *h;
- OSSLDigest *digest;
-
- if (!px_openssl_initialized)
- {
- px_openssl_initialized = 1;
- OpenSSL_add_all_algorithms();
- }
-
- md = EVP_get_digestbyname(name);
- if (md == NULL)
- return compat_find_digest(name, res);
-
- digest = px_alloc(sizeof(*digest));
- digest->algo = md;
-
- EVP_MD_CTX_init(&digest->ctx);
- if (EVP_DigestInit_ex(&digest->ctx, digest->algo, NULL) == 0)
- return -1;
-
- h = px_alloc(sizeof(*h));
- h->result_size = digest_result_size;
- h->block_size = digest_block_size;
- h->reset = digest_reset;
- h->update = digest_update;
- h->finish = digest_finish;
- h->free = digest_free;
- h->p.ptr = (void *) digest;
-
- *res = h;
- return 0;
-}
-
-/*
- * Ciphers
- *
- * The problem with OpenSSL is that the EVP* family
- * of functions does not allow enough flexibility
- * and forces some of the parameters (keylen,
- * padding) to SSL defaults.
- *
- * So need to manage ciphers ourselves.
- */
-
-struct ossl_cipher
-{
- int (*init) (PX_Cipher *c, const uint8 *key, unsigned klen, const uint8 *iv);
- int (*encrypt) (PX_Cipher *c, const uint8 *data, unsigned dlen, uint8 *res);
- int (*decrypt) (PX_Cipher *c, const uint8 *data, unsigned dlen, uint8 *res);
-
- int block_size;
- int max_key_size;
- int stream_cipher;
-};
-
-typedef struct
-{
- union
- {
- struct
- {
- BF_KEY key;
- int num;
- } bf;
- struct
- {
- DES_key_schedule key_schedule;
- } des;
- struct
- {
- DES_key_schedule k1,
- k2,
- k3;
- } des3;
- CAST_KEY cast_key;
- AES_KEY aes_key;
- } u;
- uint8 key[MAX_KEY];
- uint8 iv[MAX_IV];
- unsigned klen;
- unsigned init;
- const struct ossl_cipher *ciph;
-} ossldata;
-
-/* generic */
-
-static unsigned
-gen_ossl_block_size(PX_Cipher *c)
-{
- ossldata *od = (ossldata *) c->ptr;
-
- return od->ciph->block_size;
-}
-
-static unsigned
-gen_ossl_key_size(PX_Cipher *c)
-{
- ossldata *od = (ossldata *) c->ptr;
-
- return od->ciph->max_key_size;
-}
-
-static unsigned
-gen_ossl_iv_size(PX_Cipher *c)
-{
- unsigned ivlen;
- ossldata *od = (ossldata *) c->ptr;
-
- ivlen = od->ciph->block_size;
- return ivlen;
-}
-
-static void
-gen_ossl_free(PX_Cipher *c)
-{
- ossldata *od = (ossldata *) c->ptr;
-
- memset(od, 0, sizeof(*od));
- px_free(od);
- px_free(c);
-}
-
-/* Blowfish */
-
-/*
- * Check if strong crypto is supported. Some openssl installations
- * support only short keys and unfortunately BF_set_key does not return any
- * error value. This function tests if is possible to use strong key.
- */
-static int
-bf_check_supported_key_len(void)
-{
- static const uint8 key[56] = {
- 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87, 0x78, 0x69,
- 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f, 0x00, 0x11, 0x22, 0x33,
- 0x44, 0x55, 0x66, 0x77, 0x04, 0x68, 0x91, 0x04, 0xc2, 0xfd,
- 0x3b, 0x2f, 0x58, 0x40, 0x23, 0x64, 0x1a, 0xba, 0x61, 0x76,
- 0x1f, 0x1f, 0x1f, 0x1f, 0x0e, 0x0e, 0x0e, 0x0e, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
- };
-
- static const uint8 data[8] = {0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10};
- static const uint8 res[8] = {0xc0, 0x45, 0x04, 0x01, 0x2e, 0x4e, 0x1f, 0x53};
- static uint8 out[8];
-
- BF_KEY bf_key;
-
- /* encrypt with 448bits key and verify output */
- BF_set_key(&bf_key, 56, key);
- BF_ecb_encrypt(data, out, &bf_key, BF_ENCRYPT);
-
- if (memcmp(out, res, 8) != 0)
- return 0; /* Output does not match -> strong cipher is
- * not supported */
- return 1;
-}
-
-static int
-bf_init(PX_Cipher *c, const uint8 *key, unsigned klen, const uint8 *iv)
-{
- ossldata *od = c->ptr;
- static int bf_is_strong = -1;
-
- /*
- * Test if key len is supported. BF_set_key silently cut large keys and it
- * could be be a problem when user transfer crypted data from one server
- * to another.
- */
-
- if (bf_is_strong == -1)
- bf_is_strong = bf_check_supported_key_len();
-
- if (!bf_is_strong && klen > 16)
- return PXE_KEY_TOO_BIG;
-
- /* Key len is supported. We can use it. */
- BF_set_key(&od->u.bf.key, klen, key);
- if (iv)
- memcpy(od->iv, iv, BF_BLOCK);
- else
- memset(od->iv, 0, BF_BLOCK);
- od->u.bf.num = 0;
- return 0;
-}
-
-static int
-bf_ecb_encrypt(PX_Cipher *c, const uint8 *data, unsigned dlen, uint8 *res)
-{
- unsigned bs = gen_ossl_block_size(c);
- unsigned i;
- ossldata *od = c->ptr;
-
- for (i = 0; i < dlen / bs; i++)
- BF_ecb_encrypt(data + i * bs, res + i * bs, &od->u.bf.key, BF_ENCRYPT);
- return 0;
-}
-
-static int
-bf_ecb_decrypt(PX_Cipher *c, const uint8 *data, unsigned dlen, uint8 *res)
-{
- unsigned bs = gen_ossl_block_size(c),
- i;
- ossldata *od = c->ptr;
-
- for (i = 0; i < dlen / bs; i++)
- BF_ecb_encrypt(data + i * bs, res + i * bs, &od->u.bf.key, BF_DECRYPT);
- return 0;
-}
-
-static int
-bf_cbc_encrypt(PX_Cipher *c, const uint8 *data, unsigned dlen, uint8 *res)
-{
- ossldata *od = c->ptr;
-
- BF_cbc_encrypt(data, res, dlen, &od->u.bf.key, od->iv, BF_ENCRYPT);
- return 0;
-}
-
-static int
-bf_cbc_decrypt(PX_Cipher *c, const uint8 *data, unsigned dlen, uint8 *res)
-{
- ossldata *od = c->ptr;
-
- BF_cbc_encrypt(data, res, dlen, &od->u.bf.key, od->iv, BF_DECRYPT);
- return 0;
-}
-
-static int
-bf_cfb64_encrypt(PX_Cipher *c, const uint8 *data, unsigned dlen, uint8 *res)
-{
- ossldata *od = c->ptr;
-
- BF_cfb64_encrypt(data, res, dlen, &od->u.bf.key, od->iv,
- &od->u.bf.num, BF_ENCRYPT);
- return 0;
-}
-
-static int
-bf_cfb64_decrypt(PX_Cipher *c, const uint8 *data, unsigned dlen, uint8 *res)
-{
- ossldata *od = c->ptr;
-
- BF_cfb64_encrypt(data, res, dlen, &od->u.bf.key, od->iv,
- &od->u.bf.num, BF_DECRYPT);
- return 0;
-}
-
-/* DES */
-
-static int
-ossl_des_init(PX_Cipher *c, const uint8 *key, unsigned klen, const uint8 *iv)
-{
- ossldata *od = c->ptr;
- DES_cblock xkey;
-
- memset(&xkey, 0, sizeof(xkey));
- memcpy(&xkey, key, klen > 8 ? 8 : klen);
- DES_set_key(&xkey, &od->u.des.key_schedule);
- memset(&xkey, 0, sizeof(xkey));
-
- if (iv)
- memcpy(od->iv, iv, 8);
- else
- memset(od->iv, 0, 8);
- return 0;
-}
-
-static int
-ossl_des_ecb_encrypt(PX_Cipher *c, const uint8 *data, unsigned dlen,
- uint8 *res)
-{
- unsigned bs = gen_ossl_block_size(c);
- unsigned i;
- ossldata *od = c->ptr;
-
- for (i = 0; i < dlen / bs; i++)
- DES_ecb_encrypt((DES_cblock *) (data + i * bs),
- (DES_cblock *) (res + i * bs),
- &od->u.des.key_schedule, 1);
- return 0;
-}
-
-static int
-ossl_des_ecb_decrypt(PX_Cipher *c, const uint8 *data, unsigned dlen,
- uint8 *res)
-{
- unsigned bs = gen_ossl_block_size(c);
- unsigned i;
- ossldata *od = c->ptr;
-
- for (i = 0; i < dlen / bs; i++)
- DES_ecb_encrypt((DES_cblock *) (data + i * bs),
- (DES_cblock *) (res + i * bs),
- &od->u.des.key_schedule, 0);
- return 0;
-}
-
-static int
-ossl_des_cbc_encrypt(PX_Cipher *c, const uint8 *data, unsigned dlen,
- uint8 *res)
-{
- ossldata *od = c->ptr;
-
- DES_ncbc_encrypt(data, res, dlen, &od->u.des.key_schedule,
- (DES_cblock *) od->iv, 1);
- return 0;
-}
-
-static int
-ossl_des_cbc_decrypt(PX_Cipher *c, const uint8 *data, unsigned dlen,
- uint8 *res)
-{
- ossldata *od = c->ptr;
-
- DES_ncbc_encrypt(data, res, dlen, &od->u.des.key_schedule,
- (DES_cblock *) od->iv, 0);
- return 0;
-}
-
-/* DES3 */
-
-static int
-ossl_des3_init(PX_Cipher *c, const uint8 *key, unsigned klen, const uint8 *iv)
-{
- ossldata *od = c->ptr;
- DES_cblock xkey1,
- xkey2,
- xkey3;
-
- memset(&xkey1, 0, sizeof(xkey1));
- memset(&xkey2, 0, sizeof(xkey2));
- memset(&xkey3, 0, sizeof(xkey3));
- memcpy(&xkey1, key, klen > 8 ? 8 : klen);
- if (klen > 8)
- memcpy(&xkey2, key + 8, (klen - 8) > 8 ? 8 : (klen - 8));
- if (klen > 16)
- memcpy(&xkey3, key + 16, (klen - 16) > 8 ? 8 : (klen - 16));
-
- DES_set_key(&xkey1, &od->u.des3.k1);
- DES_set_key(&xkey2, &od->u.des3.k2);
- DES_set_key(&xkey3, &od->u.des3.k3);
- memset(&xkey1, 0, sizeof(xkey1));
- memset(&xkey2, 0, sizeof(xkey2));
- memset(&xkey3, 0, sizeof(xkey3));
-
- if (iv)
- memcpy(od->iv, iv, 8);
- else
- memset(od->iv, 0, 8);
- return 0;
-}
-
-static int
-ossl_des3_ecb_encrypt(PX_Cipher *c, const uint8 *data, unsigned dlen,
- uint8 *res)
-{
- unsigned bs = gen_ossl_block_size(c);
- unsigned i;
- ossldata *od = c->ptr;
-
- for (i = 0; i < dlen / bs; i++)
- DES_ecb3_encrypt((void *) (data + i * bs), (void *) (res + i * bs),
- &od->u.des3.k1, &od->u.des3.k2, &od->u.des3.k3, 1);
- return 0;
-}
-
-static int
-ossl_des3_ecb_decrypt(PX_Cipher *c, const uint8 *data, unsigned dlen,
- uint8 *res)
-{
- unsigned bs = gen_ossl_block_size(c);
- unsigned i;
- ossldata *od = c->ptr;
-
- for (i = 0; i < dlen / bs; i++)
- DES_ecb3_encrypt((void *) (data + i * bs), (void *) (res + i * bs),
- &od->u.des3.k1, &od->u.des3.k2, &od->u.des3.k3, 0);
- return 0;
-}
-
-static int
-ossl_des3_cbc_encrypt(PX_Cipher *c, const uint8 *data, unsigned dlen,
- uint8 *res)
-{
- ossldata *od = c->ptr;
-
- DES_ede3_cbc_encrypt(data, res, dlen,
- &od->u.des3.k1, &od->u.des3.k2, &od->u.des3.k3,
- (DES_cblock *) od->iv, 1);
- return 0;
-}
-
-static int
-ossl_des3_cbc_decrypt(PX_Cipher *c, const uint8 *data, unsigned dlen,
- uint8 *res)
-{
- ossldata *od = c->ptr;
-
- DES_ede3_cbc_encrypt(data, res, dlen,
- &od->u.des3.k1, &od->u.des3.k2, &od->u.des3.k3,
- (DES_cblock *) od->iv, 0);
- return 0;
-}
-
-/* CAST5 */
-
-static int
-ossl_cast_init(PX_Cipher *c, const uint8 *key, unsigned klen, const uint8 *iv)
-{
- ossldata *od = c->ptr;
- unsigned bs = gen_ossl_block_size(c);
-
- CAST_set_key(&od->u.cast_key, klen, key);
- if (iv)
- memcpy(od->iv, iv, bs);
- else
- memset(od->iv, 0, bs);
- return 0;
-}
-
-static int
-ossl_cast_ecb_encrypt(PX_Cipher *c, const uint8 *data, unsigned dlen, uint8 *res)
-{
- unsigned bs = gen_ossl_block_size(c);
- ossldata *od = c->ptr;
- const uint8 *end = data + dlen - bs;
-
- for (; data <= end; data += bs, res += bs)
- CAST_ecb_encrypt(data, res, &od->u.cast_key, CAST_ENCRYPT);
- return 0;
-}
-
-static int
-ossl_cast_ecb_decrypt(PX_Cipher *c, const uint8 *data, unsigned dlen, uint8 *res)
-{
- unsigned bs = gen_ossl_block_size(c);
- ossldata *od = c->ptr;
- const uint8 *end = data + dlen - bs;
-
- for (; data <= end; data += bs, res += bs)
- CAST_ecb_encrypt(data, res, &od->u.cast_key, CAST_DECRYPT);
- return 0;
-}
-
-static int
-ossl_cast_cbc_encrypt(PX_Cipher *c, const uint8 *data, unsigned dlen, uint8 *res)
-{
- ossldata *od = c->ptr;
-
- CAST_cbc_encrypt(data, res, dlen, &od->u.cast_key, od->iv, CAST_ENCRYPT);
- return 0;
-}
-
-static int
-ossl_cast_cbc_decrypt(PX_Cipher *c, const uint8 *data, unsigned dlen, uint8 *res)
-{
- ossldata *od = c->ptr;
-
- CAST_cbc_encrypt(data, res, dlen, &od->u.cast_key, od->iv, CAST_DECRYPT);
- return 0;
-}
-
-/* AES */
-
-static int
-ossl_aes_init(PX_Cipher *c, const uint8 *key, unsigned klen, const uint8 *iv)
-{
- ossldata *od = c->ptr;
- unsigned bs = gen_ossl_block_size(c);
-
- if (klen <= 128 / 8)
- od->klen = 128 / 8;
- else if (klen <= 192 / 8)
- od->klen = 192 / 8;
- else if (klen <= 256 / 8)
- od->klen = 256 / 8;
- else
- return PXE_KEY_TOO_BIG;
-
- memcpy(od->key, key, klen);
-
- if (iv)
- memcpy(od->iv, iv, bs);
- else
- memset(od->iv, 0, bs);
- return 0;
-}
-
-static int
-ossl_aes_key_init(ossldata *od, int type)
-{
- int err;
-
- /*
- * Strong key support could be missing on some openssl installations. We
- * must check return value from set key function.
- */
- if (type == AES_ENCRYPT)
- err = AES_set_encrypt_key(od->key, od->klen * 8, &od->u.aes_key);
- else
- err = AES_set_decrypt_key(od->key, od->klen * 8, &od->u.aes_key);
-
- if (err == 0)
- {
- od->init = 1;
- return 0;
- }
- od->init = 0;
- return PXE_KEY_TOO_BIG;
-}
-
-static int
-ossl_aes_ecb_encrypt(PX_Cipher *c, const uint8 *data, unsigned dlen,
- uint8 *res)
-{
- unsigned bs = gen_ossl_block_size(c);
- ossldata *od = c->ptr;
- const uint8 *end = data + dlen - bs;
- int err;
-
- if (!od->init)
- if ((err = ossl_aes_key_init(od, AES_ENCRYPT)) != 0)
- return err;
-
- for (; data <= end; data += bs, res += bs)
- AES_ecb_encrypt(data, res, &od->u.aes_key, AES_ENCRYPT);
- return 0;
-}
-
-static int
-ossl_aes_ecb_decrypt(PX_Cipher *c, const uint8 *data, unsigned dlen,
- uint8 *res)
-{
- unsigned bs = gen_ossl_block_size(c);
- ossldata *od = c->ptr;
- const uint8 *end = data + dlen - bs;
- int err;
-
- if (!od->init)
- if ((err = ossl_aes_key_init(od, AES_DECRYPT)) != 0)
- return err;
-
- for (; data <= end; data += bs, res += bs)
- AES_ecb_encrypt(data, res, &od->u.aes_key, AES_DECRYPT);
- return 0;
-}
-
-static int
-ossl_aes_cbc_encrypt(PX_Cipher *c, const uint8 *data, unsigned dlen,
- uint8 *res)
-{
- ossldata *od = c->ptr;
- int err;
-
- if (!od->init)
- if ((err = ossl_aes_key_init(od, AES_ENCRYPT)) != 0)
- return err;
-
- AES_cbc_encrypt(data, res, dlen, &od->u.aes_key, od->iv, AES_ENCRYPT);
- return 0;
-}
-
-static int
-ossl_aes_cbc_decrypt(PX_Cipher *c, const uint8 *data, unsigned dlen,
- uint8 *res)
-{
- ossldata *od = c->ptr;
- int err;
-
- if (!od->init)
- if ((err = ossl_aes_key_init(od, AES_DECRYPT)) != 0)
- return err;
-
- AES_cbc_encrypt(data, res, dlen, &od->u.aes_key, od->iv, AES_DECRYPT);
- return 0;
-}
-
-/*
- * aliases
- */
-
-static PX_Alias ossl_aliases[] = {
- {"bf", "bf-cbc"},
- {"blowfish", "bf-cbc"},
- {"blowfish-cbc", "bf-cbc"},
- {"blowfish-ecb", "bf-ecb"},
- {"blowfish-cfb", "bf-cfb"},
- {"des", "des-cbc"},
- {"3des", "des3-cbc"},
- {"3des-ecb", "des3-ecb"},
- {"3des-cbc", "des3-cbc"},
- {"cast5", "cast5-cbc"},
- {"aes", "aes-cbc"},
- {"rijndael", "aes-cbc"},
- {"rijndael-cbc", "aes-cbc"},
- {"rijndael-ecb", "aes-ecb"},
- {NULL, NULL}
-};
-
-static const struct ossl_cipher ossl_bf_cbc = {
- bf_init, bf_cbc_encrypt, bf_cbc_decrypt,
- 64 / 8, 448 / 8, 0
-};
-
-static const struct ossl_cipher ossl_bf_ecb = {
- bf_init, bf_ecb_encrypt, bf_ecb_decrypt,
- 64 / 8, 448 / 8, 0
-};
-
-static const struct ossl_cipher ossl_bf_cfb = {
- bf_init, bf_cfb64_encrypt, bf_cfb64_decrypt,
- 64 / 8, 448 / 8, 1
-};
-
-static const struct ossl_cipher ossl_des_ecb = {
- ossl_des_init, ossl_des_ecb_encrypt, ossl_des_ecb_decrypt,
- 64 / 8, 64 / 8, 0
-};
-
-static const struct ossl_cipher ossl_des_cbc = {
- ossl_des_init, ossl_des_cbc_encrypt, ossl_des_cbc_decrypt,
- 64 / 8, 64 / 8, 0
-};
-
-static const struct ossl_cipher ossl_des3_ecb = {
- ossl_des3_init, ossl_des3_ecb_encrypt, ossl_des3_ecb_decrypt,
- 64 / 8, 192 / 8, 0
-};
-
-static const struct ossl_cipher ossl_des3_cbc = {
- ossl_des3_init, ossl_des3_cbc_encrypt, ossl_des3_cbc_decrypt,
- 64 / 8, 192 / 8, 0
-};
-
-static const struct ossl_cipher ossl_cast_ecb = {
- ossl_cast_init, ossl_cast_ecb_encrypt, ossl_cast_ecb_decrypt,
- 64 / 8, 128 / 8, 0
-};
-
-static const struct ossl_cipher ossl_cast_cbc = {
- ossl_cast_init, ossl_cast_cbc_encrypt, ossl_cast_cbc_decrypt,
- 64 / 8, 128 / 8, 0
-};
-
-static const struct ossl_cipher ossl_aes_ecb = {
- ossl_aes_init, ossl_aes_ecb_encrypt, ossl_aes_ecb_decrypt,
- 128 / 8, 256 / 8, 0
-};
-
-static const struct ossl_cipher ossl_aes_cbc = {
- ossl_aes_init, ossl_aes_cbc_encrypt, ossl_aes_cbc_decrypt,
- 128 / 8, 256 / 8, 0
-};
-
-/*
- * Special handlers
- */
-struct ossl_cipher_lookup
-{
- const char *name;
- const struct ossl_cipher *ciph;
-};
-
-static const struct ossl_cipher_lookup ossl_cipher_types[] = {
- {"bf-cbc", &ossl_bf_cbc},
- {"bf-ecb", &ossl_bf_ecb},
- {"bf-cfb", &ossl_bf_cfb},
- {"des-ecb", &ossl_des_ecb},
- {"des-cbc", &ossl_des_cbc},
- {"des3-ecb", &ossl_des3_ecb},
- {"des3-cbc", &ossl_des3_cbc},
- {"cast5-ecb", &ossl_cast_ecb},
- {"cast5-cbc", &ossl_cast_cbc},
- {"aes-ecb", &ossl_aes_ecb},
- {"aes-cbc", &ossl_aes_cbc},
- {NULL}
-};
-
-/* PUBLIC functions */
-
-int
-px_find_cipher(const char *name, PX_Cipher **res)
-{
- const struct ossl_cipher_lookup *i;
- PX_Cipher *c = NULL;
- ossldata *od;
-
- name = px_resolve_alias(ossl_aliases, name);
-
- for (i = ossl_cipher_types; i->name; i++)
- if (!strcmp(i->name, name))
- break;
-
- if (i->name == NULL)
- return PXE_NO_CIPHER;
-
- od = px_alloc(sizeof(*od));
- memset(od, 0, sizeof(*od));
- od->ciph = i->ciph;
-
- c = px_alloc(sizeof(*c));
- c->block_size = gen_ossl_block_size;
- c->key_size = gen_ossl_key_size;
- c->iv_size = gen_ossl_iv_size;
- c->free = gen_ossl_free;
- c->init = od->ciph->init;
- c->encrypt = od->ciph->encrypt;
- c->decrypt = od->ciph->decrypt;
- c->ptr = od;
-
- *res = c;
- return 0;
-}
-
-
-static int openssl_random_init = 0;
-
-/*
- * OpenSSL random should re-feeded occasionally. From /dev/urandom
- * preferably.
- */
-static void
-init_openssl_rand(void)
-{
- if (RAND_get_rand_method() == NULL)
- RAND_set_rand_method(RAND_SSLeay());
- openssl_random_init = 1;
-}
-
-int
-px_get_random_bytes(uint8 *dst, unsigned count)
-{
- int res;
-
- if (!openssl_random_init)
- init_openssl_rand();
-
- res = RAND_bytes(dst, count);
- if (res == 1)
- return count;
-
- return PXE_OSSL_RAND_ERROR;
-}
-
-int
-px_get_pseudo_random_bytes(uint8 *dst, unsigned count)
-{
- int res;
-
- if (!openssl_random_init)
- init_openssl_rand();
-
- res = RAND_pseudo_bytes(dst, count);
- if (res == 0 || res == 1)
- return count;
-
- return PXE_OSSL_RAND_ERROR;
-}
-
-int
-px_add_entropy(const uint8 *data, unsigned count)
-{
- /*
- * estimate 0 bits
- */
- RAND_add(data, count, 0);
- return 0;
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/package/Makefile
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/package/Makefile b/contrib/pgcrypto/package/Makefile
deleted file mode 100644
index fa6494d..0000000
--- a/contrib/pgcrypto/package/Makefile
+++ /dev/null
@@ -1,29 +0,0 @@
-all: gppkg
-
-BLD_TOP=./../../../
-include $(BLD_TOP)/src/VERSIONS.mk
-
-OS=$(word 1,$(subst _, ,$(BLD_ARCH)))
-ARCH=$(shell uname -p)
-
-PGCRYPTO_DIR=`cd .. && pwd`
-PGCRYPTO_VER=$(HQ_MAJORVERSION)
-PGCRYPTO_REL=1
-PGCRYPTO_RPM_FLAGS="--define 'pgcrypto_dir $(PGCRYPTO_DIR)' --define 'pgcrypto_ver $(PGCRYPTO_VER)' --define 'pgcrypto_rel $(PGCRYPTO_REL)'"
-PGCRYPTO_RPM=pgcrypto-hawq-$(PGCRYPTO_VER)-$(PGCRYPTO_REL).$(ARCH).rpm
-PGCRYPTO_GPPKG=pgcrypto-hawq-$(PGCRYPTO_VER)-$(PGCRYPTO_REL)-$(OS)-$(ARCH).gppkg
-
-TARGET_GPPKG=$(PGCRYPTO_GPPKG)
-EXTRA_CLEAN+=$(PGCRYPTO_RPM) $(PGCRYPTO_GPPKG)
-
-#
-# Generic rules to build gppkgs included here
-#
-include $(BLD_TOP)/../build-utils/makefiles/gppkg.mk
-
-gppkg:
- $(MAKE) $(PGCRYPTO_RPM) RPM_FLAGS=$(PGCRYPTO_RPM_FLAGS)
- $(MAKE) $(PGCRYPTO_GPPKG) MAIN_RPM=$(PGCRYPTO_RPM) GPPKG_REL=$(PGCRYPTO_REL)
- cp pgcrypto*.gppkg pgcrypto.gppkg
-
-.PHONY: gppkg
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/package/gppkg_spec.yml.in
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/package/gppkg_spec.yml.in b/contrib/pgcrypto/package/gppkg_spec.yml.in
deleted file mode 100644
index 113d440..0000000
--- a/contrib/pgcrypto/package/gppkg_spec.yml.in
+++ /dev/null
@@ -1,8 +0,0 @@
-Pkgname: pgcrypto-hawq
-Architecture: #arch
-Version: #hq_majorversion
-OS: #os
-GPDBVersion: 2.0.0.0
-Description: Pgcrypto provides cryptographic functions for the HAWQ Database.
-PostInstall:
-- Master: "echo 'Please run psql -d mydatabase -f $GPHOME/share/postgresql/contrib/pgcrypto.sql to enable the package.'"
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/package/pgcrypto.spec
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/package/pgcrypto.spec b/contrib/pgcrypto/package/pgcrypto.spec
deleted file mode 100644
index 43684ad..0000000
--- a/contrib/pgcrypto/package/pgcrypto.spec
+++ /dev/null
@@ -1,20 +0,0 @@
-Summary: Cryptographic functions for Greenplum Database
-License: PostgreSQL License
-Name: pgcrypto-hawq
-Version: %{pgcrypto_ver}
-Release: %{pgcrypto_rel}
-Group: Development/Tools
-Prefix: /temp
-AutoReq: no
-AutoProv: no
-Provides: pgcrypto = %{pgcrypto_ver}
-
-%description
-The Pgcrypto package provides cryptographic package for the Greenplum Database.
-
-%install
-mkdir -p %{buildroot}/temp
-make -C %{pgcrypto_dir} install prefix=%{buildroot}/temp
-
-%files
-/temp
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/pgcrypto.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/pgcrypto.c b/contrib/pgcrypto/pgcrypto.c
deleted file mode 100644
index 067ef6c..0000000
--- a/contrib/pgcrypto/pgcrypto.c
+++ /dev/null
@@ -1,508 +0,0 @@
-/*
- * pgcrypto.c
- * Various cryptographic stuff for PostgreSQL.
- *
- * Copyright (c) 2001 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/pgcrypto.c,v 1.26 2007/02/27 23:48:06 tgl Exp $
- */
-
-#include "postgres.h"
-
-#include <ctype.h>
-
-#include "fmgr.h"
-#include "parser/scansup.h"
-
-#include "px.h"
-#include "px-crypt.h"
-#include "pgcrypto.h"
-#include "postmaster/postmaster.h"
-
-PG_MODULE_MAGIC;
-
-/* private stuff */
-
-typedef int (*PFN) (const char *name, void **res);
-static void *find_provider(text *name, PFN pf, char *desc, int silent);
-
-/* SQL function: hash(bytea, text) returns bytea */
-PG_FUNCTION_INFO_V1(pg_digest);
-
-Datum
-pg_digest(PG_FUNCTION_ARGS)
-{
- bytea *arg;
- text *name;
- unsigned len,
- hlen;
- PX_MD *md;
- bytea *res;
-
- name = PG_GETARG_TEXT_P(1);
-
- /* will give error if fails */
- md = find_provider(name, (PFN) px_find_digest, "Digest", 0);
-
- hlen = px_md_result_size(md);
-
- res = (text *) palloc(hlen + VARHDRSZ);
- SET_VARSIZE(res, hlen + VARHDRSZ);
-
- arg = PG_GETARG_BYTEA_P(0);
- len = VARSIZE(arg) - VARHDRSZ;
-
- px_md_update(md, (uint8 *) VARDATA(arg), len);
- px_md_finish(md, (uint8 *) VARDATA(res));
- px_md_free(md);
-
- PG_FREE_IF_COPY(arg, 0);
- PG_FREE_IF_COPY(name, 1);
-
- PG_RETURN_BYTEA_P(res);
-}
-
-/* SQL function: hmac(data:bytea, key:bytea, type:text) returns bytea */
-PG_FUNCTION_INFO_V1(pg_hmac);
-
-Datum
-pg_hmac(PG_FUNCTION_ARGS)
-{
- bytea *arg;
- bytea *key;
- text *name;
- unsigned len,
- hlen,
- klen;
- PX_HMAC *h;
- bytea *res;
-
- name = PG_GETARG_TEXT_P(2);
-
- /* will give error if fails */
- h = find_provider(name, (PFN) px_find_hmac, "HMAC", 0);
-
- hlen = px_hmac_result_size(h);
-
- res = (text *) palloc(hlen + VARHDRSZ);
- SET_VARSIZE(res, hlen + VARHDRSZ);
-
- arg = PG_GETARG_BYTEA_P(0);
- key = PG_GETARG_BYTEA_P(1);
- len = VARSIZE(arg) - VARHDRSZ;
- klen = VARSIZE(key) - VARHDRSZ;
-
- px_hmac_init(h, (uint8 *) VARDATA(key), klen);
- px_hmac_update(h, (uint8 *) VARDATA(arg), len);
- px_hmac_finish(h, (uint8 *) VARDATA(res));
- px_hmac_free(h);
-
- PG_FREE_IF_COPY(arg, 0);
- PG_FREE_IF_COPY(key, 1);
- PG_FREE_IF_COPY(name, 2);
-
- PG_RETURN_BYTEA_P(res);
-}
-
-
-/* SQL function: pg_gen_salt(text) returns text */
-PG_FUNCTION_INFO_V1(pg_gen_salt);
-
-Datum
-pg_gen_salt(PG_FUNCTION_ARGS)
-{
- text *arg0;
- int len;
- text *res;
- char buf[PX_MAX_SALT_LEN + 1];
-
- arg0 = PG_GETARG_TEXT_P(0);
-
- len = VARSIZE(arg0) - VARHDRSZ;
- len = len > PX_MAX_SALT_LEN ? PX_MAX_SALT_LEN : len;
- memcpy(buf, VARDATA(arg0), len);
- buf[len] = 0;
- len = px_gen_salt(buf, buf, 0);
- if (len < 0)
- ereport(ERROR,
- (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
- errmsg("gen_salt: %s", px_strerror(len))));
-
- res = (text *) palloc(len + VARHDRSZ);
- SET_VARSIZE(res, len + VARHDRSZ);
- memcpy(VARDATA(res), buf, len);
-
- PG_FREE_IF_COPY(arg0, 0);
-
- PG_RETURN_TEXT_P(res);
-}
-
-/* SQL function: pg_gen_salt(text, int4) returns text */
-PG_FUNCTION_INFO_V1(pg_gen_salt_rounds);
-
-Datum
-pg_gen_salt_rounds(PG_FUNCTION_ARGS)
-{
- text *arg0;
- int rounds;
- int len;
- text *res;
- char buf[PX_MAX_SALT_LEN + 1];
-
- arg0 = PG_GETARG_TEXT_P(0);
- rounds = PG_GETARG_INT32(1);
-
- len = VARSIZE(arg0) - VARHDRSZ;
- len = len > PX_MAX_SALT_LEN ? PX_MAX_SALT_LEN : len;
- memcpy(buf, VARDATA(arg0), len);
- buf[len] = 0;
- len = px_gen_salt(buf, buf, rounds);
- if (len < 0)
- ereport(ERROR,
- (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
- errmsg("gen_salt: %s", px_strerror(len))));
-
- res = (text *) palloc(len + VARHDRSZ);
- SET_VARSIZE(res, len + VARHDRSZ);
- memcpy(VARDATA(res), buf, len);
-
- PG_FREE_IF_COPY(arg0, 0);
-
- PG_RETURN_TEXT_P(res);
-}
-
-/* SQL function: pg_crypt(psw:text, salt:text) returns text */
-PG_FUNCTION_INFO_V1(pg_crypt);
-
-Datum
-pg_crypt(PG_FUNCTION_ARGS)
-{
- text *arg0;
- text *arg1;
- unsigned len0,
- len1,
- clen;
- char *buf0,
- *buf1,
- *cres,
- *resbuf;
- text *res;
-
- arg0 = PG_GETARG_TEXT_P(0);
- arg1 = PG_GETARG_TEXT_P(1);
- len0 = VARSIZE(arg0) - VARHDRSZ;
- len1 = VARSIZE(arg1) - VARHDRSZ;
-
- buf0 = palloc(len0 + 1);
- buf1 = palloc(len1 + 1);
-
- memcpy(buf0, VARDATA(arg0), len0);
- memcpy(buf1, VARDATA(arg1), len1);
-
- buf0[len0] = '\0';
- buf1[len1] = '\0';
-
- resbuf = palloc0(PX_MAX_CRYPT);
-
- cres = px_crypt(buf0, buf1, resbuf, PX_MAX_CRYPT);
-
- pfree(buf0);
- pfree(buf1);
-
- if (cres == NULL)
- ereport(ERROR,
- (errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
- errmsg("crypt(3) returned NULL")));
-
- clen = strlen(cres);
-
- res = (text *) palloc(clen + VARHDRSZ);
- SET_VARSIZE(res, clen + VARHDRSZ);
- memcpy(VARDATA(res), cres, clen);
- pfree(resbuf);
-
- PG_FREE_IF_COPY(arg0, 0);
- PG_FREE_IF_COPY(arg1, 1);
-
- PG_RETURN_TEXT_P(res);
-}
-
-/* SQL function: pg_encrypt(bytea, bytea, text) returns bytea */
-PG_FUNCTION_INFO_V1(pg_encrypt);
-
-Datum
-pg_encrypt(PG_FUNCTION_ARGS)
-{
- int err;
- bytea *data,
- *key,
- *res;
- text *type;
- PX_Combo *c;
- unsigned dlen,
- klen,
- rlen;
-
- type = PG_GETARG_TEXT_P(2);
- c = find_provider(type, (PFN) px_find_combo, "Cipher", 0);
-
- data = PG_GETARG_BYTEA_P(0);
- key = PG_GETARG_BYTEA_P(1);
- dlen = VARSIZE(data) - VARHDRSZ;
- klen = VARSIZE(key) - VARHDRSZ;
-
- rlen = px_combo_encrypt_len(c, dlen);
- res = palloc(VARHDRSZ + rlen);
-
- err = px_combo_init(c, (uint8 *) VARDATA(key), klen, NULL, 0);
- if (!err)
- err = px_combo_encrypt(c, (uint8 *) VARDATA(data), dlen,
- (uint8 *) VARDATA(res), &rlen);
- px_combo_free(c);
-
- PG_FREE_IF_COPY(data, 0);
- PG_FREE_IF_COPY(key, 1);
- PG_FREE_IF_COPY(type, 2);
-
- if (err)
- {
- pfree(res);
- ereport(ERROR,
- (errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
- errmsg("encrypt error: %s", px_strerror(err))));
- }
-
- SET_VARSIZE(res, VARHDRSZ + rlen);
- PG_RETURN_BYTEA_P(res);
-}
-
-/* SQL function: pg_decrypt(bytea, bytea, text) returns bytea */
-PG_FUNCTION_INFO_V1(pg_decrypt);
-
-Datum
-pg_decrypt(PG_FUNCTION_ARGS)
-{
- int err;
- bytea *data,
- *key,
- *res;
- text *type;
- PX_Combo *c;
- unsigned dlen,
- klen,
- rlen;
-
- type = PG_GETARG_TEXT_P(2);
- c = find_provider(type, (PFN) px_find_combo, "Cipher", 0);
-
- data = PG_GETARG_BYTEA_P(0);
- key = PG_GETARG_BYTEA_P(1);
- dlen = VARSIZE(data) - VARHDRSZ;
- klen = VARSIZE(key) - VARHDRSZ;
-
- rlen = px_combo_decrypt_len(c, dlen);
- res = palloc(VARHDRSZ + rlen);
-
- err = px_combo_init(c, (uint8 *) VARDATA(key), klen, NULL, 0);
- if (!err)
- err = px_combo_decrypt(c, (uint8 *) VARDATA(data), dlen,
- (uint8 *) VARDATA(res), &rlen);
-
- px_combo_free(c);
-
- if (err)
- ereport(ERROR,
- (errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
- errmsg("decrypt error: %s", px_strerror(err))));
-
- SET_VARSIZE(res, VARHDRSZ + rlen);
-
- PG_FREE_IF_COPY(data, 0);
- PG_FREE_IF_COPY(key, 1);
- PG_FREE_IF_COPY(type, 2);
-
- PG_RETURN_BYTEA_P(res);
-}
-
-/* SQL function: pg_encrypt_iv(bytea, bytea, bytea, text) returns bytea */
-PG_FUNCTION_INFO_V1(pg_encrypt_iv);
-
-Datum
-pg_encrypt_iv(PG_FUNCTION_ARGS)
-{
- int err;
- bytea *data,
- *key,
- *iv,
- *res;
- text *type;
- PX_Combo *c;
- unsigned dlen,
- klen,
- ivlen,
- rlen;
-
- type = PG_GETARG_TEXT_P(3);
- c = find_provider(type, (PFN) px_find_combo, "Cipher", 0);
-
- data = PG_GETARG_BYTEA_P(0);
- key = PG_GETARG_BYTEA_P(1);
- iv = PG_GETARG_BYTEA_P(2);
- dlen = VARSIZE(data) - VARHDRSZ;
- klen = VARSIZE(key) - VARHDRSZ;
- ivlen = VARSIZE(iv) - VARHDRSZ;
-
- rlen = px_combo_encrypt_len(c, dlen);
- res = palloc(VARHDRSZ + rlen);
-
- err = px_combo_init(c, (uint8 *) VARDATA(key), klen,
- (uint8 *) VARDATA(iv), ivlen);
- if (!err)
- px_combo_encrypt(c, (uint8 *) VARDATA(data), dlen,
- (uint8 *) VARDATA(res), &rlen);
-
- px_combo_free(c);
-
- if (err)
- ereport(ERROR,
- (errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
- errmsg("encrypt_iv error: %s", px_strerror(err))));
-
- SET_VARSIZE(res, VARHDRSZ + rlen);
-
- PG_FREE_IF_COPY(data, 0);
- PG_FREE_IF_COPY(key, 1);
- PG_FREE_IF_COPY(iv, 2);
- PG_FREE_IF_COPY(type, 3);
-
- PG_RETURN_BYTEA_P(res);
-}
-
-/* SQL function: pg_decrypt_iv(bytea, bytea, bytea, text) returns bytea */
-PG_FUNCTION_INFO_V1(pg_decrypt_iv);
-
-Datum
-pg_decrypt_iv(PG_FUNCTION_ARGS)
-{
- int err;
- bytea *data,
- *key,
- *iv,
- *res;
- text *type;
- PX_Combo *c;
- unsigned dlen,
- klen,
- rlen,
- ivlen;
-
- type = PG_GETARG_TEXT_P(3);
- c = find_provider(type, (PFN) px_find_combo, "Cipher", 0);
-
- data = PG_GETARG_BYTEA_P(0);
- key = PG_GETARG_BYTEA_P(1);
- iv = PG_GETARG_BYTEA_P(2);
- dlen = VARSIZE(data) - VARHDRSZ;
- klen = VARSIZE(key) - VARHDRSZ;
- ivlen = VARSIZE(iv) - VARHDRSZ;
-
- rlen = px_combo_decrypt_len(c, dlen);
- res = palloc(VARHDRSZ + rlen);
-
- err = px_combo_init(c, (uint8 *) VARDATA(key), klen,
- (uint8 *) VARDATA(iv), ivlen);
- if (!err)
- px_combo_decrypt(c, (uint8 *) VARDATA(data), dlen,
- (uint8 *) VARDATA(res), &rlen);
-
- px_combo_free(c);
-
- if (err)
- ereport(ERROR,
- (errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
- errmsg("decrypt_iv error: %s", px_strerror(err))));
-
- SET_VARSIZE(res, VARHDRSZ + rlen);
-
- PG_FREE_IF_COPY(data, 0);
- PG_FREE_IF_COPY(key, 1);
- PG_FREE_IF_COPY(iv, 2);
- PG_FREE_IF_COPY(type, 3);
-
- PG_RETURN_BYTEA_P(res);
-}
-
-/* SQL function: pg_random_bytes(int4) returns bytea */
-PG_FUNCTION_INFO_V1(pg_random_bytes);
-
-Datum
-pg_random_bytes(PG_FUNCTION_ARGS)
-{
- int err;
- int len = PG_GETARG_INT32(0);
- bytea *res;
-
- if (len < 1 || len > 1024)
- ereport(ERROR,
- (errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
- errmsg("Length not in range")));
-
- res = palloc(VARHDRSZ + len);
- SET_VARSIZE(res, VARHDRSZ + len);
-
- /* generate result */
- err = px_get_random_bytes((uint8 *) VARDATA(res), len);
- if (err < 0)
- ereport(ERROR,
- (errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
- errmsg("Random generator error: %s", px_strerror(err))));
-
- PG_RETURN_BYTEA_P(res);
-}
-
-static void *
-find_provider(text *name,
- PFN provider_lookup,
- char *desc, int silent)
-{
- void *res;
- char *buf;
- int err;
-
- buf = downcase_truncate_identifier(VARDATA(name),
- VARSIZE(name) - VARHDRSZ,
- false);
-
- err = provider_lookup(buf, &res);
-
- if (err && !silent)
- ereport(ERROR,
- (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
- errmsg("Cannot use \"%s\": %s", buf, px_strerror(err))));
-
- pfree(buf);
-
- return err ? NULL : res;
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/pgcrypto.h
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/pgcrypto.h b/contrib/pgcrypto/pgcrypto.h
deleted file mode 100644
index b011b06..0000000
--- a/contrib/pgcrypto/pgcrypto.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * pgcrypto.h
- * Header file for pgcrypto.
- *
- * Copyright (c) 2000 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/pgcrypto.h,v 1.11 2006/09/05 21:26:48 tgl Exp $
- */
-
-#ifndef _PG_CRYPTO_H
-#define _PG_CRYPTO_H
-
-#include "fmgr.h"
-
-/* exported functions */
-Datum pg_digest(PG_FUNCTION_ARGS);
-Datum pg_hmac(PG_FUNCTION_ARGS);
-Datum pg_gen_salt(PG_FUNCTION_ARGS);
-Datum pg_gen_salt_rounds(PG_FUNCTION_ARGS);
-Datum pg_crypt(PG_FUNCTION_ARGS);
-Datum pg_encrypt(PG_FUNCTION_ARGS);
-Datum pg_decrypt(PG_FUNCTION_ARGS);
-Datum pg_encrypt_iv(PG_FUNCTION_ARGS);
-Datum pg_decrypt_iv(PG_FUNCTION_ARGS);
-Datum pg_random_bytes(PG_FUNCTION_ARGS);
-
-#endif
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/pgcrypto.sql.in
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/pgcrypto.sql.in b/contrib/pgcrypto/pgcrypto.sql.in
deleted file mode 100644
index 8388e86..0000000
--- a/contrib/pgcrypto/pgcrypto.sql.in
+++ /dev/null
@@ -1,203 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/pgcrypto/pgcrypto.sql.in,v 1.15 2007/11/13 04:24:28 momjian Exp $ */
-
--- Adjust this setting to control where the objects get created.
-SET search_path = public;
-
-CREATE OR REPLACE FUNCTION digest(text, text)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pg_digest'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION digest(bytea, text)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pg_digest'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION hmac(text, text, text)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pg_hmac'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION hmac(bytea, bytea, text)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pg_hmac'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION crypt(text, text)
-RETURNS text
-AS 'MODULE_PATHNAME', 'pg_crypt'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION gen_salt(text)
-RETURNS text
-AS 'MODULE_PATHNAME', 'pg_gen_salt'
-LANGUAGE C VOLATILE STRICT;
-
-CREATE OR REPLACE FUNCTION gen_salt(text, int4)
-RETURNS text
-AS 'MODULE_PATHNAME', 'pg_gen_salt_rounds'
-LANGUAGE C VOLATILE STRICT;
-
-CREATE OR REPLACE FUNCTION encrypt(bytea, bytea, text)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pg_encrypt'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION decrypt(bytea, bytea, text)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pg_decrypt'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION encrypt_iv(bytea, bytea, bytea, text)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pg_encrypt_iv'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION decrypt_iv(bytea, bytea, bytea, text)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pg_decrypt_iv'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION gen_random_bytes(int4)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pg_random_bytes'
-LANGUAGE 'C' VOLATILE STRICT;
-
---
--- pgp_sym_encrypt(data, key)
---
-CREATE OR REPLACE FUNCTION pgp_sym_encrypt(text, text)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pgp_sym_encrypt_text'
-LANGUAGE C STRICT;
-
-CREATE OR REPLACE FUNCTION pgp_sym_encrypt_bytea(bytea, text)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pgp_sym_encrypt_bytea'
-LANGUAGE C STRICT;
-
---
--- pgp_sym_encrypt(data, key, args)
---
-CREATE OR REPLACE FUNCTION pgp_sym_encrypt(text, text, text)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pgp_sym_encrypt_text'
-LANGUAGE C STRICT;
-
-CREATE OR REPLACE FUNCTION pgp_sym_encrypt_bytea(bytea, text, text)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pgp_sym_encrypt_bytea'
-LANGUAGE C STRICT;
-
---
--- pgp_sym_decrypt(data, key)
---
-CREATE OR REPLACE FUNCTION pgp_sym_decrypt(bytea, text)
-RETURNS text
-AS 'MODULE_PATHNAME', 'pgp_sym_decrypt_text'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION pgp_sym_decrypt_bytea(bytea, text)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pgp_sym_decrypt_bytea'
-LANGUAGE C IMMUTABLE STRICT;
-
---
--- pgp_sym_decrypt(data, key, args)
---
-CREATE OR REPLACE FUNCTION pgp_sym_decrypt(bytea, text, text)
-RETURNS text
-AS 'MODULE_PATHNAME', 'pgp_sym_decrypt_text'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION pgp_sym_decrypt_bytea(bytea, text, text)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pgp_sym_decrypt_bytea'
-LANGUAGE C IMMUTABLE STRICT;
-
---
--- pgp_pub_encrypt(data, key)
---
-CREATE OR REPLACE FUNCTION pgp_pub_encrypt(text, bytea)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pgp_pub_encrypt_text'
-LANGUAGE C STRICT;
-
-CREATE OR REPLACE FUNCTION pgp_pub_encrypt_bytea(bytea, bytea)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pgp_pub_encrypt_bytea'
-LANGUAGE C STRICT;
-
---
--- pgp_pub_encrypt(data, key, args)
---
-CREATE OR REPLACE FUNCTION pgp_pub_encrypt(text, bytea, text)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pgp_pub_encrypt_text'
-LANGUAGE C STRICT;
-
-CREATE OR REPLACE FUNCTION pgp_pub_encrypt_bytea(bytea, bytea, text)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pgp_pub_encrypt_bytea'
-LANGUAGE C STRICT;
-
---
--- pgp_pub_decrypt(data, key)
---
-CREATE OR REPLACE FUNCTION pgp_pub_decrypt(bytea, bytea)
-RETURNS text
-AS 'MODULE_PATHNAME', 'pgp_pub_decrypt_text'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION pgp_pub_decrypt_bytea(bytea, bytea)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pgp_pub_decrypt_bytea'
-LANGUAGE C IMMUTABLE STRICT;
-
---
--- pgp_pub_decrypt(data, key, psw)
---
-CREATE OR REPLACE FUNCTION pgp_pub_decrypt(bytea, bytea, text)
-RETURNS text
-AS 'MODULE_PATHNAME', 'pgp_pub_decrypt_text'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION pgp_pub_decrypt_bytea(bytea, bytea, text)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pgp_pub_decrypt_bytea'
-LANGUAGE C IMMUTABLE STRICT;
-
---
--- pgp_pub_decrypt(data, key, psw, arg)
---
-CREATE OR REPLACE FUNCTION pgp_pub_decrypt(bytea, bytea, text, text)
-RETURNS text
-AS 'MODULE_PATHNAME', 'pgp_pub_decrypt_text'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION pgp_pub_decrypt_bytea(bytea, bytea, text, text)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pgp_pub_decrypt_bytea'
-LANGUAGE C IMMUTABLE STRICT;
-
---
--- PGP key ID
---
-CREATE OR REPLACE FUNCTION pgp_key_id(bytea)
-RETURNS text
-AS 'MODULE_PATHNAME', 'pgp_key_id_w'
-LANGUAGE C IMMUTABLE STRICT;
-
---
--- pgp armor
---
-CREATE OR REPLACE FUNCTION armor(bytea)
-RETURNS text
-AS 'MODULE_PATHNAME', 'pg_armor'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION dearmor(text)
-RETURNS bytea
-AS 'MODULE_PATHNAME', 'pg_dearmor'
-LANGUAGE C IMMUTABLE STRICT;
-
[03/11] incubator-hawq git commit: HAWQ-394. Remove pgcrypto from
code base
Posted by hu...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/rijndael.tbl
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/rijndael.tbl b/contrib/pgcrypto/rijndael.tbl
deleted file mode 100755
index bc0a382..0000000
--- a/contrib/pgcrypto/rijndael.tbl
+++ /dev/null
@@ -1,1139 +0,0 @@
-/* Generated by rijndael.c */
-
-static const u1byte pow_tab[256] = {
- 1, 3, 5, 15, 17, 51, 85, 255, 26, 46, 114, 150, 161, 248, 19, 53,
- 95, 225, 56, 72, 216, 115, 149, 164, 247, 2, 6, 10, 30, 34, 102, 170,
- 229, 52, 92, 228, 55, 89, 235, 38, 106, 190, 217, 112, 144, 171, 230, 49,
- 83, 245, 4, 12, 20, 60, 68, 204, 79, 209, 104, 184, 211, 110, 178, 205,
- 76, 212, 103, 169, 224, 59, 77, 215, 98, 166, 241, 8, 24, 40, 120, 136,
- 131, 158, 185, 208, 107, 189, 220, 127, 129, 152, 179, 206, 73, 219, 118, 154,
- 181, 196, 87, 249, 16, 48, 80, 240, 11, 29, 39, 105, 187, 214, 97, 163,
- 254, 25, 43, 125, 135, 146, 173, 236, 47, 113, 147, 174, 233, 32, 96, 160,
- 251, 22, 58, 78, 210, 109, 183, 194, 93, 231, 50, 86, 250, 21, 63, 65,
- 195, 94, 226, 61, 71, 201, 64, 192, 91, 237, 44, 116, 156, 191, 218, 117,
- 159, 186, 213, 100, 172, 239, 42, 126, 130, 157, 188, 223, 122, 142, 137, 128,
- 155, 182, 193, 88, 232, 35, 101, 175, 234, 37, 111, 177, 200, 67, 197, 84,
- 252, 31, 33, 99, 165, 244, 7, 9, 27, 45, 119, 153, 176, 203, 70, 202,
- 69, 207, 74, 222, 121, 139, 134, 145, 168, 227, 62, 66, 198, 81, 243, 14,
- 18, 54, 90, 238, 41, 123, 141, 140, 143, 138, 133, 148, 167, 242, 13, 23,
- 57, 75, 221, 124, 132, 151, 162, 253, 28, 36, 108, 180, 199, 82, 246, 1
-};
-
-static const u1byte log_tab[256] = {
- 1, 3, 5, 15, 17, 51, 85, 255, 26, 46, 114, 150, 161, 248, 19, 53,
- 95, 225, 56, 72, 216, 115, 149, 164, 247, 2, 6, 10, 30, 34, 102, 170,
- 229, 52, 92, 228, 55, 89, 235, 38, 106, 190, 217, 112, 144, 171, 230, 49,
- 83, 245, 4, 12, 20, 60, 68, 204, 79, 209, 104, 184, 211, 110, 178, 205,
- 76, 212, 103, 169, 224, 59, 77, 215, 98, 166, 241, 8, 24, 40, 120, 136,
- 131, 158, 185, 208, 107, 189, 220, 127, 129, 152, 179, 206, 73, 219, 118, 154,
- 181, 196, 87, 249, 16, 48, 80, 240, 11, 29, 39, 105, 187, 214, 97, 163,
- 254, 25, 43, 125, 135, 146, 173, 236, 47, 113, 147, 174, 233, 32, 96, 160,
- 251, 22, 58, 78, 210, 109, 183, 194, 93, 231, 50, 86, 250, 21, 63, 65,
- 195, 94, 226, 61, 71, 201, 64, 192, 91, 237, 44, 116, 156, 191, 218, 117,
- 159, 186, 213, 100, 172, 239, 42, 126, 130, 157, 188, 223, 122, 142, 137, 128,
- 155, 182, 193, 88, 232, 35, 101, 175, 234, 37, 111, 177, 200, 67, 197, 84,
- 252, 31, 33, 99, 165, 244, 7, 9, 27, 45, 119, 153, 176, 203, 70, 202,
- 69, 207, 74, 222, 121, 139, 134, 145, 168, 227, 62, 66, 198, 81, 243, 14,
- 18, 54, 90, 238, 41, 123, 141, 140, 143, 138, 133, 148, 167, 242, 13, 23,
- 57, 75, 221, 124, 132, 151, 162, 253, 28, 36, 108, 180, 199, 82, 246, 1
-};
-
-static const u1byte sbx_tab[256] = {
- 1, 3, 5, 15, 17, 51, 85, 255, 26, 46, 114, 150, 161, 248, 19, 53,
- 95, 225, 56, 72, 216, 115, 149, 164, 247, 2, 6, 10, 30, 34, 102, 170,
- 229, 52, 92, 228, 55, 89, 235, 38, 106, 190, 217, 112, 144, 171, 230, 49,
- 83, 245, 4, 12, 20, 60, 68, 204, 79, 209, 104, 184, 211, 110, 178, 205,
- 76, 212, 103, 169, 224, 59, 77, 215, 98, 166, 241, 8, 24, 40, 120, 136,
- 131, 158, 185, 208, 107, 189, 220, 127, 129, 152, 179, 206, 73, 219, 118, 154,
- 181, 196, 87, 249, 16, 48, 80, 240, 11, 29, 39, 105, 187, 214, 97, 163,
- 254, 25, 43, 125, 135, 146, 173, 236, 47, 113, 147, 174, 233, 32, 96, 160,
- 251, 22, 58, 78, 210, 109, 183, 194, 93, 231, 50, 86, 250, 21, 63, 65,
- 195, 94, 226, 61, 71, 201, 64, 192, 91, 237, 44, 116, 156, 191, 218, 117,
- 159, 186, 213, 100, 172, 239, 42, 126, 130, 157, 188, 223, 122, 142, 137, 128,
- 155, 182, 193, 88, 232, 35, 101, 175, 234, 37, 111, 177, 200, 67, 197, 84,
- 252, 31, 33, 99, 165, 244, 7, 9, 27, 45, 119, 153, 176, 203, 70, 202,
- 69, 207, 74, 222, 121, 139, 134, 145, 168, 227, 62, 66, 198, 81, 243, 14,
- 18, 54, 90, 238, 41, 123, 141, 140, 143, 138, 133, 148, 167, 242, 13, 23,
- 57, 75, 221, 124, 132, 151, 162, 253, 28, 36, 108, 180, 199, 82, 246, 1
-};
-
-static const u1byte isb_tab[256] = {
- 1, 3, 5, 15, 17, 51, 85, 255, 26, 46, 114, 150, 161, 248, 19, 53,
- 95, 225, 56, 72, 216, 115, 149, 164, 247, 2, 6, 10, 30, 34, 102, 170,
- 229, 52, 92, 228, 55, 89, 235, 38, 106, 190, 217, 112, 144, 171, 230, 49,
- 83, 245, 4, 12, 20, 60, 68, 204, 79, 209, 104, 184, 211, 110, 178, 205,
- 76, 212, 103, 169, 224, 59, 77, 215, 98, 166, 241, 8, 24, 40, 120, 136,
- 131, 158, 185, 208, 107, 189, 220, 127, 129, 152, 179, 206, 73, 219, 118, 154,
- 181, 196, 87, 249, 16, 48, 80, 240, 11, 29, 39, 105, 187, 214, 97, 163,
- 254, 25, 43, 125, 135, 146, 173, 236, 47, 113, 147, 174, 233, 32, 96, 160,
- 251, 22, 58, 78, 210, 109, 183, 194, 93, 231, 50, 86, 250, 21, 63, 65,
- 195, 94, 226, 61, 71, 201, 64, 192, 91, 237, 44, 116, 156, 191, 218, 117,
- 159, 186, 213, 100, 172, 239, 42, 126, 130, 157, 188, 223, 122, 142, 137, 128,
- 155, 182, 193, 88, 232, 35, 101, 175, 234, 37, 111, 177, 200, 67, 197, 84,
- 252, 31, 33, 99, 165, 244, 7, 9, 27, 45, 119, 153, 176, 203, 70, 202,
- 69, 207, 74, 222, 121, 139, 134, 145, 168, 227, 62, 66, 198, 81, 243, 14,
- 18, 54, 90, 238, 41, 123, 141, 140, 143, 138, 133, 148, 167, 242, 13, 23,
- 57, 75, 221, 124, 132, 151, 162, 253, 28, 36, 108, 180, 199, 82, 246, 1
-};
-
-static const u4byte ft_tab[4][256] = {
-{
- 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6,
- 0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591,
- 0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56,
- 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec,
- 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa,
- 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb,
- 0xecadad41, 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45,
- 0xbf9c9c23, 0xf7a4a453, 0x967272e4, 0x5bc0c09b,
- 0xc2b7b775, 0x1cfdfde1, 0xae93933d, 0x6a26264c,
- 0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83,
- 0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9,
- 0x937171e2, 0x73d8d8ab, 0x53313162, 0x3f15152a,
- 0x0c040408, 0x52c7c795, 0x65232346, 0x5ec3c39d,
- 0x28181830, 0xa1969637, 0x0f05050a, 0xb59a9a2f,
- 0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df,
- 0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea,
- 0x1b090912, 0x9e83831d, 0x742c2c58, 0x2e1a1a34,
- 0x2d1b1b36, 0xb26e6edc, 0xee5a5ab4, 0xfba0a05b,
- 0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, 0xceb3b37d,
- 0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413,
- 0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1,
- 0x60202040, 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6,
- 0xbe6a6ad4, 0x46cbcb8d, 0xd9bebe67, 0x4b393972,
- 0xde4a4a94, 0xd44c4c98, 0xe85858b0, 0x4acfcf85,
- 0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed,
- 0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511,
- 0xcf45458a, 0x10f9f9e9, 0x06020204, 0x817f7ffe,
- 0xf05050a0, 0x443c3c78, 0xba9f9f25, 0xe3a8a84b,
- 0xf35151a2, 0xfea3a35d, 0xc0404080, 0x8a8f8f05,
- 0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1,
- 0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142,
- 0x30101020, 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf,
- 0x4ccdcd81, 0x140c0c18, 0x35131326, 0x2fececc3,
- 0xe15f5fbe, 0xa2979735, 0xcc444488, 0x3917172e,
- 0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a,
- 0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6,
- 0xa06060c0, 0x98818119, 0xd14f4f9e, 0x7fdcdca3,
- 0x66222244, 0x7e2a2a54, 0xab90903b, 0x8388880b,
- 0xca46468c, 0x29eeeec7, 0xd3b8b86b, 0x3c141428,
- 0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad,
- 0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14,
- 0xdb494992, 0x0a06060c, 0x6c242448, 0xe45c5cb8,
- 0x5dc2c29f, 0x6ed3d3bd, 0xefacac43, 0xa66262c4,
- 0xa8919139, 0xa4959531, 0x37e4e4d3, 0x8b7979f2,
- 0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda,
- 0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949,
- 0xb46c6cd8, 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf,
- 0xaf6565ca, 0x8e7a7af4, 0xe9aeae47, 0x18080810,
- 0xd5baba6f, 0x887878f0, 0x6f25254a, 0x722e2e5c,
- 0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697,
- 0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e,
- 0xdd4b4b96, 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f,
- 0x907070e0, 0x423e3e7c, 0xc4b5b571, 0xaa6666cc,
- 0xd8484890, 0x05030306, 0x01f6f6f7, 0x120e0e1c,
- 0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969,
- 0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27,
- 0x38e1e1d9, 0x13f8f8eb, 0xb398982b, 0x33111122,
- 0xbb6969d2, 0x70d9d9a9, 0x898e8e07, 0xa7949433,
- 0xb69b9b2d, 0x221e1e3c, 0x92878715, 0x20e9e9c9,
- 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5,
- 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a,
- 0xdabfbf65, 0x31e6e6d7, 0xc6424284, 0xb86868d0,
- 0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e,
- 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c
-}, {
- 0x6363c6a5, 0x7c7cf884, 0x7777ee99, 0x7b7bf68d,
- 0xf2f2ff0d, 0x6b6bd6bd, 0x6f6fdeb1, 0xc5c59154,
- 0x30306050, 0x01010203, 0x6767cea9, 0x2b2b567d,
- 0xfefee719, 0xd7d7b562, 0xabab4de6, 0x7676ec9a,
- 0xcaca8f45, 0x82821f9d, 0xc9c98940, 0x7d7dfa87,
- 0xfafaef15, 0x5959b2eb, 0x47478ec9, 0xf0f0fb0b,
- 0xadad41ec, 0xd4d4b367, 0xa2a25ffd, 0xafaf45ea,
- 0x9c9c23bf, 0xa4a453f7, 0x7272e496, 0xc0c09b5b,
- 0xb7b775c2, 0xfdfde11c, 0x93933dae, 0x26264c6a,
- 0x36366c5a, 0x3f3f7e41, 0xf7f7f502, 0xcccc834f,
- 0x3434685c, 0xa5a551f4, 0xe5e5d134, 0xf1f1f908,
- 0x7171e293, 0xd8d8ab73, 0x31316253, 0x15152a3f,
- 0x0404080c, 0xc7c79552, 0x23234665, 0xc3c39d5e,
- 0x18183028, 0x969637a1, 0x05050a0f, 0x9a9a2fb5,
- 0x07070e09, 0x12122436, 0x80801b9b, 0xe2e2df3d,
- 0xebebcd26, 0x27274e69, 0xb2b27fcd, 0x7575ea9f,
- 0x0909121b, 0x83831d9e, 0x2c2c5874, 0x1a1a342e,
- 0x1b1b362d, 0x6e6edcb2, 0x5a5ab4ee, 0xa0a05bfb,
- 0x5252a4f6, 0x3b3b764d, 0xd6d6b761, 0xb3b37dce,
- 0x2929527b, 0xe3e3dd3e, 0x2f2f5e71, 0x84841397,
- 0x5353a6f5, 0xd1d1b968, 0x00000000, 0xededc12c,
- 0x20204060, 0xfcfce31f, 0xb1b179c8, 0x5b5bb6ed,
- 0x6a6ad4be, 0xcbcb8d46, 0xbebe67d9, 0x3939724b,
- 0x4a4a94de, 0x4c4c98d4, 0x5858b0e8, 0xcfcf854a,
- 0xd0d0bb6b, 0xefefc52a, 0xaaaa4fe5, 0xfbfbed16,
- 0x434386c5, 0x4d4d9ad7, 0x33336655, 0x85851194,
- 0x45458acf, 0xf9f9e910, 0x02020406, 0x7f7ffe81,
- 0x5050a0f0, 0x3c3c7844, 0x9f9f25ba, 0xa8a84be3,
- 0x5151a2f3, 0xa3a35dfe, 0x404080c0, 0x8f8f058a,
- 0x92923fad, 0x9d9d21bc, 0x38387048, 0xf5f5f104,
- 0xbcbc63df, 0xb6b677c1, 0xdadaaf75, 0x21214263,
- 0x10102030, 0xffffe51a, 0xf3f3fd0e, 0xd2d2bf6d,
- 0xcdcd814c, 0x0c0c1814, 0x13132635, 0xececc32f,
- 0x5f5fbee1, 0x979735a2, 0x444488cc, 0x17172e39,
- 0xc4c49357, 0xa7a755f2, 0x7e7efc82, 0x3d3d7a47,
- 0x6464c8ac, 0x5d5dbae7, 0x1919322b, 0x7373e695,
- 0x6060c0a0, 0x81811998, 0x4f4f9ed1, 0xdcdca37f,
- 0x22224466, 0x2a2a547e, 0x90903bab, 0x88880b83,
- 0x46468cca, 0xeeeec729, 0xb8b86bd3, 0x1414283c,
- 0xdedea779, 0x5e5ebce2, 0x0b0b161d, 0xdbdbad76,
- 0xe0e0db3b, 0x32326456, 0x3a3a744e, 0x0a0a141e,
- 0x494992db, 0x06060c0a, 0x2424486c, 0x5c5cb8e4,
- 0xc2c29f5d, 0xd3d3bd6e, 0xacac43ef, 0x6262c4a6,
- 0x919139a8, 0x959531a4, 0xe4e4d337, 0x7979f28b,
- 0xe7e7d532, 0xc8c88b43, 0x37376e59, 0x6d6ddab7,
- 0x8d8d018c, 0xd5d5b164, 0x4e4e9cd2, 0xa9a949e0,
- 0x6c6cd8b4, 0x5656acfa, 0xf4f4f307, 0xeaeacf25,
- 0x6565caaf, 0x7a7af48e, 0xaeae47e9, 0x08081018,
- 0xbaba6fd5, 0x7878f088, 0x25254a6f, 0x2e2e5c72,
- 0x1c1c3824, 0xa6a657f1, 0xb4b473c7, 0xc6c69751,
- 0xe8e8cb23, 0xdddda17c, 0x7474e89c, 0x1f1f3e21,
- 0x4b4b96dd, 0xbdbd61dc, 0x8b8b0d86, 0x8a8a0f85,
- 0x7070e090, 0x3e3e7c42, 0xb5b571c4, 0x6666ccaa,
- 0x484890d8, 0x03030605, 0xf6f6f701, 0x0e0e1c12,
- 0x6161c2a3, 0x35356a5f, 0x5757aef9, 0xb9b969d0,
- 0x86861791, 0xc1c19958, 0x1d1d3a27, 0x9e9e27b9,
- 0xe1e1d938, 0xf8f8eb13, 0x98982bb3, 0x11112233,
- 0x6969d2bb, 0xd9d9a970, 0x8e8e0789, 0x949433a7,
- 0x9b9b2db6, 0x1e1e3c22, 0x87871592, 0xe9e9c920,
- 0xcece8749, 0x5555aaff, 0x28285078, 0xdfdfa57a,
- 0x8c8c038f, 0xa1a159f8, 0x89890980, 0x0d0d1a17,
- 0xbfbf65da, 0xe6e6d731, 0x424284c6, 0x6868d0b8,
- 0x414182c3, 0x999929b0, 0x2d2d5a77, 0x0f0f1e11,
- 0xb0b07bcb, 0x5454a8fc, 0xbbbb6dd6, 0x16162c3a
-}, {
- 0x63c6a563, 0x7cf8847c, 0x77ee9977, 0x7bf68d7b,
- 0xf2ff0df2, 0x6bd6bd6b, 0x6fdeb16f, 0xc59154c5,
- 0x30605030, 0x01020301, 0x67cea967, 0x2b567d2b,
- 0xfee719fe, 0xd7b562d7, 0xab4de6ab, 0x76ec9a76,
- 0xca8f45ca, 0x821f9d82, 0xc98940c9, 0x7dfa877d,
- 0xfaef15fa, 0x59b2eb59, 0x478ec947, 0xf0fb0bf0,
- 0xad41ecad, 0xd4b367d4, 0xa25ffda2, 0xaf45eaaf,
- 0x9c23bf9c, 0xa453f7a4, 0x72e49672, 0xc09b5bc0,
- 0xb775c2b7, 0xfde11cfd, 0x933dae93, 0x264c6a26,
- 0x366c5a36, 0x3f7e413f, 0xf7f502f7, 0xcc834fcc,
- 0x34685c34, 0xa551f4a5, 0xe5d134e5, 0xf1f908f1,
- 0x71e29371, 0xd8ab73d8, 0x31625331, 0x152a3f15,
- 0x04080c04, 0xc79552c7, 0x23466523, 0xc39d5ec3,
- 0x18302818, 0x9637a196, 0x050a0f05, 0x9a2fb59a,
- 0x070e0907, 0x12243612, 0x801b9b80, 0xe2df3de2,
- 0xebcd26eb, 0x274e6927, 0xb27fcdb2, 0x75ea9f75,
- 0x09121b09, 0x831d9e83, 0x2c58742c, 0x1a342e1a,
- 0x1b362d1b, 0x6edcb26e, 0x5ab4ee5a, 0xa05bfba0,
- 0x52a4f652, 0x3b764d3b, 0xd6b761d6, 0xb37dceb3,
- 0x29527b29, 0xe3dd3ee3, 0x2f5e712f, 0x84139784,
- 0x53a6f553, 0xd1b968d1, 0x00000000, 0xedc12ced,
- 0x20406020, 0xfce31ffc, 0xb179c8b1, 0x5bb6ed5b,
- 0x6ad4be6a, 0xcb8d46cb, 0xbe67d9be, 0x39724b39,
- 0x4a94de4a, 0x4c98d44c, 0x58b0e858, 0xcf854acf,
- 0xd0bb6bd0, 0xefc52aef, 0xaa4fe5aa, 0xfbed16fb,
- 0x4386c543, 0x4d9ad74d, 0x33665533, 0x85119485,
- 0x458acf45, 0xf9e910f9, 0x02040602, 0x7ffe817f,
- 0x50a0f050, 0x3c78443c, 0x9f25ba9f, 0xa84be3a8,
- 0x51a2f351, 0xa35dfea3, 0x4080c040, 0x8f058a8f,
- 0x923fad92, 0x9d21bc9d, 0x38704838, 0xf5f104f5,
- 0xbc63dfbc, 0xb677c1b6, 0xdaaf75da, 0x21426321,
- 0x10203010, 0xffe51aff, 0xf3fd0ef3, 0xd2bf6dd2,
- 0xcd814ccd, 0x0c18140c, 0x13263513, 0xecc32fec,
- 0x5fbee15f, 0x9735a297, 0x4488cc44, 0x172e3917,
- 0xc49357c4, 0xa755f2a7, 0x7efc827e, 0x3d7a473d,
- 0x64c8ac64, 0x5dbae75d, 0x19322b19, 0x73e69573,
- 0x60c0a060, 0x81199881, 0x4f9ed14f, 0xdca37fdc,
- 0x22446622, 0x2a547e2a, 0x903bab90, 0x880b8388,
- 0x468cca46, 0xeec729ee, 0xb86bd3b8, 0x14283c14,
- 0xdea779de, 0x5ebce25e, 0x0b161d0b, 0xdbad76db,
- 0xe0db3be0, 0x32645632, 0x3a744e3a, 0x0a141e0a,
- 0x4992db49, 0x060c0a06, 0x24486c24, 0x5cb8e45c,
- 0xc29f5dc2, 0xd3bd6ed3, 0xac43efac, 0x62c4a662,
- 0x9139a891, 0x9531a495, 0xe4d337e4, 0x79f28b79,
- 0xe7d532e7, 0xc88b43c8, 0x376e5937, 0x6ddab76d,
- 0x8d018c8d, 0xd5b164d5, 0x4e9cd24e, 0xa949e0a9,
- 0x6cd8b46c, 0x56acfa56, 0xf4f307f4, 0xeacf25ea,
- 0x65caaf65, 0x7af48e7a, 0xae47e9ae, 0x08101808,
- 0xba6fd5ba, 0x78f08878, 0x254a6f25, 0x2e5c722e,
- 0x1c38241c, 0xa657f1a6, 0xb473c7b4, 0xc69751c6,
- 0xe8cb23e8, 0xdda17cdd, 0x74e89c74, 0x1f3e211f,
- 0x4b96dd4b, 0xbd61dcbd, 0x8b0d868b, 0x8a0f858a,
- 0x70e09070, 0x3e7c423e, 0xb571c4b5, 0x66ccaa66,
- 0x4890d848, 0x03060503, 0xf6f701f6, 0x0e1c120e,
- 0x61c2a361, 0x356a5f35, 0x57aef957, 0xb969d0b9,
- 0x86179186, 0xc19958c1, 0x1d3a271d, 0x9e27b99e,
- 0xe1d938e1, 0xf8eb13f8, 0x982bb398, 0x11223311,
- 0x69d2bb69, 0xd9a970d9, 0x8e07898e, 0x9433a794,
- 0x9b2db69b, 0x1e3c221e, 0x87159287, 0xe9c920e9,
- 0xce8749ce, 0x55aaff55, 0x28507828, 0xdfa57adf,
- 0x8c038f8c, 0xa159f8a1, 0x89098089, 0x0d1a170d,
- 0xbf65dabf, 0xe6d731e6, 0x4284c642, 0x68d0b868,
- 0x4182c341, 0x9929b099, 0x2d5a772d, 0x0f1e110f,
- 0xb07bcbb0, 0x54a8fc54, 0xbb6dd6bb, 0x162c3a16
-}, {
- 0xc6a56363, 0xf8847c7c, 0xee997777, 0xf68d7b7b,
- 0xff0df2f2, 0xd6bd6b6b, 0xdeb16f6f, 0x9154c5c5,
- 0x60503030, 0x02030101, 0xcea96767, 0x567d2b2b,
- 0xe719fefe, 0xb562d7d7, 0x4de6abab, 0xec9a7676,
- 0x8f45caca, 0x1f9d8282, 0x8940c9c9, 0xfa877d7d,
- 0xef15fafa, 0xb2eb5959, 0x8ec94747, 0xfb0bf0f0,
- 0x41ecadad, 0xb367d4d4, 0x5ffda2a2, 0x45eaafaf,
- 0x23bf9c9c, 0x53f7a4a4, 0xe4967272, 0x9b5bc0c0,
- 0x75c2b7b7, 0xe11cfdfd, 0x3dae9393, 0x4c6a2626,
- 0x6c5a3636, 0x7e413f3f, 0xf502f7f7, 0x834fcccc,
- 0x685c3434, 0x51f4a5a5, 0xd134e5e5, 0xf908f1f1,
- 0xe2937171, 0xab73d8d8, 0x62533131, 0x2a3f1515,
- 0x080c0404, 0x9552c7c7, 0x46652323, 0x9d5ec3c3,
- 0x30281818, 0x37a19696, 0x0a0f0505, 0x2fb59a9a,
- 0x0e090707, 0x24361212, 0x1b9b8080, 0xdf3de2e2,
- 0xcd26ebeb, 0x4e692727, 0x7fcdb2b2, 0xea9f7575,
- 0x121b0909, 0x1d9e8383, 0x58742c2c, 0x342e1a1a,
- 0x362d1b1b, 0xdcb26e6e, 0xb4ee5a5a, 0x5bfba0a0,
- 0xa4f65252, 0x764d3b3b, 0xb761d6d6, 0x7dceb3b3,
- 0x527b2929, 0xdd3ee3e3, 0x5e712f2f, 0x13978484,
- 0xa6f55353, 0xb968d1d1, 0x00000000, 0xc12ceded,
- 0x40602020, 0xe31ffcfc, 0x79c8b1b1, 0xb6ed5b5b,
- 0xd4be6a6a, 0x8d46cbcb, 0x67d9bebe, 0x724b3939,
- 0x94de4a4a, 0x98d44c4c, 0xb0e85858, 0x854acfcf,
- 0xbb6bd0d0, 0xc52aefef, 0x4fe5aaaa, 0xed16fbfb,
- 0x86c54343, 0x9ad74d4d, 0x66553333, 0x11948585,
- 0x8acf4545, 0xe910f9f9, 0x04060202, 0xfe817f7f,
- 0xa0f05050, 0x78443c3c, 0x25ba9f9f, 0x4be3a8a8,
- 0xa2f35151, 0x5dfea3a3, 0x80c04040, 0x058a8f8f,
- 0x3fad9292, 0x21bc9d9d, 0x70483838, 0xf104f5f5,
- 0x63dfbcbc, 0x77c1b6b6, 0xaf75dada, 0x42632121,
- 0x20301010, 0xe51affff, 0xfd0ef3f3, 0xbf6dd2d2,
- 0x814ccdcd, 0x18140c0c, 0x26351313, 0xc32fecec,
- 0xbee15f5f, 0x35a29797, 0x88cc4444, 0x2e391717,
- 0x9357c4c4, 0x55f2a7a7, 0xfc827e7e, 0x7a473d3d,
- 0xc8ac6464, 0xbae75d5d, 0x322b1919, 0xe6957373,
- 0xc0a06060, 0x19988181, 0x9ed14f4f, 0xa37fdcdc,
- 0x44662222, 0x547e2a2a, 0x3bab9090, 0x0b838888,
- 0x8cca4646, 0xc729eeee, 0x6bd3b8b8, 0x283c1414,
- 0xa779dede, 0xbce25e5e, 0x161d0b0b, 0xad76dbdb,
- 0xdb3be0e0, 0x64563232, 0x744e3a3a, 0x141e0a0a,
- 0x92db4949, 0x0c0a0606, 0x486c2424, 0xb8e45c5c,
- 0x9f5dc2c2, 0xbd6ed3d3, 0x43efacac, 0xc4a66262,
- 0x39a89191, 0x31a49595, 0xd337e4e4, 0xf28b7979,
- 0xd532e7e7, 0x8b43c8c8, 0x6e593737, 0xdab76d6d,
- 0x018c8d8d, 0xb164d5d5, 0x9cd24e4e, 0x49e0a9a9,
- 0xd8b46c6c, 0xacfa5656, 0xf307f4f4, 0xcf25eaea,
- 0xcaaf6565, 0xf48e7a7a, 0x47e9aeae, 0x10180808,
- 0x6fd5baba, 0xf0887878, 0x4a6f2525, 0x5c722e2e,
- 0x38241c1c, 0x57f1a6a6, 0x73c7b4b4, 0x9751c6c6,
- 0xcb23e8e8, 0xa17cdddd, 0xe89c7474, 0x3e211f1f,
- 0x96dd4b4b, 0x61dcbdbd, 0x0d868b8b, 0x0f858a8a,
- 0xe0907070, 0x7c423e3e, 0x71c4b5b5, 0xccaa6666,
- 0x90d84848, 0x06050303, 0xf701f6f6, 0x1c120e0e,
- 0xc2a36161, 0x6a5f3535, 0xaef95757, 0x69d0b9b9,
- 0x17918686, 0x9958c1c1, 0x3a271d1d, 0x27b99e9e,
- 0xd938e1e1, 0xeb13f8f8, 0x2bb39898, 0x22331111,
- 0xd2bb6969, 0xa970d9d9, 0x07898e8e, 0x33a79494,
- 0x2db69b9b, 0x3c221e1e, 0x15928787, 0xc920e9e9,
- 0x8749cece, 0xaaff5555, 0x50782828, 0xa57adfdf,
- 0x038f8c8c, 0x59f8a1a1, 0x09808989, 0x1a170d0d,
- 0x65dabfbf, 0xd731e6e6, 0x84c64242, 0xd0b86868,
- 0x82c34141, 0x29b09999, 0x5a772d2d, 0x1e110f0f,
- 0x7bcbb0b0, 0xa8fc5454, 0x6dd6bbbb, 0x2c3a1616
-}
-};
-
-static const u4byte it_tab[4][256] = {
-{
- 0x50a7f451, 0x5365417e, 0xc3a4171a, 0x965e273a,
- 0xcb6bab3b, 0xf1459d1f, 0xab58faac, 0x9303e34b,
- 0x55fa3020, 0xf66d76ad, 0x9176cc88, 0x254c02f5,
- 0xfcd7e54f, 0xd7cb2ac5, 0x80443526, 0x8fa362b5,
- 0x495ab1de, 0x671bba25, 0x980eea45, 0xe1c0fe5d,
- 0x02752fc3, 0x12f04c81, 0xa397468d, 0xc6f9d36b,
- 0xe75f8f03, 0x959c9215, 0xeb7a6dbf, 0xda595295,
- 0x2d83bed4, 0xd3217458, 0x2969e049, 0x44c8c98e,
- 0x6a89c275, 0x78798ef4, 0x6b3e5899, 0xdd71b927,
- 0xb64fe1be, 0x17ad88f0, 0x66ac20c9, 0xb43ace7d,
- 0x184adf63, 0x82311ae5, 0x60335197, 0x457f5362,
- 0xe07764b1, 0x84ae6bbb, 0x1ca081fe, 0x942b08f9,
- 0x58684870, 0x19fd458f, 0x876cde94, 0xb7f87b52,
- 0x23d373ab, 0xe2024b72, 0x578f1fe3, 0x2aab5566,
- 0x0728ebb2, 0x03c2b52f, 0x9a7bc586, 0xa50837d3,
- 0xf2872830, 0xb2a5bf23, 0xba6a0302, 0x5c8216ed,
- 0x2b1ccf8a, 0x92b479a7, 0xf0f207f3, 0xa1e2694e,
- 0xcdf4da65, 0xd5be0506, 0x1f6234d1, 0x8afea6c4,
- 0x9d532e34, 0xa055f3a2, 0x32e18a05, 0x75ebf6a4,
- 0x39ec830b, 0xaaef6040, 0x069f715e, 0x51106ebd,
- 0xf98a213e, 0x3d06dd96, 0xae053edd, 0x46bde64d,
- 0xb58d5491, 0x055dc471, 0x6fd40604, 0xff155060,
- 0x24fb9819, 0x97e9bdd6, 0xcc434089, 0x779ed967,
- 0xbd42e8b0, 0x888b8907, 0x385b19e7, 0xdbeec879,
- 0x470a7ca1, 0xe90f427c, 0xc91e84f8, 0x00000000,
- 0x83868009, 0x48ed2b32, 0xac70111e, 0x4e725a6c,
- 0xfbff0efd, 0x5638850f, 0x1ed5ae3d, 0x27392d36,
- 0x64d90f0a, 0x21a65c68, 0xd1545b9b, 0x3a2e3624,
- 0xb1670a0c, 0x0fe75793, 0xd296eeb4, 0x9e919b1b,
- 0x4fc5c080, 0xa220dc61, 0x694b775a, 0x161a121c,
- 0x0aba93e2, 0xe52aa0c0, 0x43e0223c, 0x1d171b12,
- 0x0b0d090e, 0xadc78bf2, 0xb9a8b62d, 0xc8a91e14,
- 0x8519f157, 0x4c0775af, 0xbbdd99ee, 0xfd607fa3,
- 0x9f2601f7, 0xbcf5725c, 0xc53b6644, 0x347efb5b,
- 0x7629438b, 0xdcc623cb, 0x68fcedb6, 0x63f1e4b8,
- 0xcadc31d7, 0x10856342, 0x40229713, 0x2011c684,
- 0x7d244a85, 0xf83dbbd2, 0x1132f9ae, 0x6da129c7,
- 0x4b2f9e1d, 0xf330b2dc, 0xec52860d, 0xd0e3c177,
- 0x6c16b32b, 0x99b970a9, 0xfa489411, 0x2264e947,
- 0xc48cfca8, 0x1a3ff0a0, 0xd82c7d56, 0xef903322,
- 0xc74e4987, 0xc1d138d9, 0xfea2ca8c, 0x360bd498,
- 0xcf81f5a6, 0x28de7aa5, 0x268eb7da, 0xa4bfad3f,
- 0xe49d3a2c, 0x0d927850, 0x9bcc5f6a, 0x62467e54,
- 0xc2138df6, 0xe8b8d890, 0x5ef7392e, 0xf5afc382,
- 0xbe805d9f, 0x7c93d069, 0xa92dd56f, 0xb31225cf,
- 0x3b99acc8, 0xa77d1810, 0x6e639ce8, 0x7bbb3bdb,
- 0x097826cd, 0xf418596e, 0x01b79aec, 0xa89a4f83,
- 0x656e95e6, 0x7ee6ffaa, 0x08cfbc21, 0xe6e815ef,
- 0xd99be7ba, 0xce366f4a, 0xd4099fea, 0xd67cb029,
- 0xafb2a431, 0x31233f2a, 0x3094a5c6, 0xc066a235,
- 0x37bc4e74, 0xa6ca82fc, 0xb0d090e0, 0x15d8a733,
- 0x4a9804f1, 0xf7daec41, 0x0e50cd7f, 0x2ff69117,
- 0x8dd64d76, 0x4db0ef43, 0x544daacc, 0xdf0496e4,
- 0xe3b5d19e, 0x1b886a4c, 0xb81f2cc1, 0x7f516546,
- 0x04ea5e9d, 0x5d358c01, 0x737487fa, 0x2e410bfb,
- 0x5a1d67b3, 0x52d2db92, 0x335610e9, 0x1347d66d,
- 0x8c61d79a, 0x7a0ca137, 0x8e14f859, 0x893c13eb,
- 0xee27a9ce, 0x35c961b7, 0xede51ce1, 0x3cb1477a,
- 0x59dfd29c, 0x3f73f255, 0x79ce1418, 0xbf37c773,
- 0xeacdf753, 0x5baafd5f, 0x146f3ddf, 0x86db4478,
- 0x81f3afca, 0x3ec468b9, 0x2c342438, 0x5f40a3c2,
- 0x72c31d16, 0x0c25e2bc, 0x8b493c28, 0x41950dff,
- 0x7101a839, 0xdeb30c08, 0x9ce4b4d8, 0x90c15664,
- 0x6184cb7b, 0x70b632d5, 0x745c6c48, 0x4257b8d0
-}, {
- 0xa7f45150, 0x65417e53, 0xa4171ac3, 0x5e273a96,
- 0x6bab3bcb, 0x459d1ff1, 0x58faacab, 0x03e34b93,
- 0xfa302055, 0x6d76adf6, 0x76cc8891, 0x4c02f525,
- 0xd7e54ffc, 0xcb2ac5d7, 0x44352680, 0xa362b58f,
- 0x5ab1de49, 0x1bba2567, 0x0eea4598, 0xc0fe5de1,
- 0x752fc302, 0xf04c8112, 0x97468da3, 0xf9d36bc6,
- 0x5f8f03e7, 0x9c921595, 0x7a6dbfeb, 0x595295da,
- 0x83bed42d, 0x217458d3, 0x69e04929, 0xc8c98e44,
- 0x89c2756a, 0x798ef478, 0x3e58996b, 0x71b927dd,
- 0x4fe1beb6, 0xad88f017, 0xac20c966, 0x3ace7db4,
- 0x4adf6318, 0x311ae582, 0x33519760, 0x7f536245,
- 0x7764b1e0, 0xae6bbb84, 0xa081fe1c, 0x2b08f994,
- 0x68487058, 0xfd458f19, 0x6cde9487, 0xf87b52b7,
- 0xd373ab23, 0x024b72e2, 0x8f1fe357, 0xab55662a,
- 0x28ebb207, 0xc2b52f03, 0x7bc5869a, 0x0837d3a5,
- 0x872830f2, 0xa5bf23b2, 0x6a0302ba, 0x8216ed5c,
- 0x1ccf8a2b, 0xb479a792, 0xf207f3f0, 0xe2694ea1,
- 0xf4da65cd, 0xbe0506d5, 0x6234d11f, 0xfea6c48a,
- 0x532e349d, 0x55f3a2a0, 0xe18a0532, 0xebf6a475,
- 0xec830b39, 0xef6040aa, 0x9f715e06, 0x106ebd51,
- 0x8a213ef9, 0x06dd963d, 0x053eddae, 0xbde64d46,
- 0x8d5491b5, 0x5dc47105, 0xd406046f, 0x155060ff,
- 0xfb981924, 0xe9bdd697, 0x434089cc, 0x9ed96777,
- 0x42e8b0bd, 0x8b890788, 0x5b19e738, 0xeec879db,
- 0x0a7ca147, 0x0f427ce9, 0x1e84f8c9, 0x00000000,
- 0x86800983, 0xed2b3248, 0x70111eac, 0x725a6c4e,
- 0xff0efdfb, 0x38850f56, 0xd5ae3d1e, 0x392d3627,
- 0xd90f0a64, 0xa65c6821, 0x545b9bd1, 0x2e36243a,
- 0x670a0cb1, 0xe757930f, 0x96eeb4d2, 0x919b1b9e,
- 0xc5c0804f, 0x20dc61a2, 0x4b775a69, 0x1a121c16,
- 0xba93e20a, 0x2aa0c0e5, 0xe0223c43, 0x171b121d,
- 0x0d090e0b, 0xc78bf2ad, 0xa8b62db9, 0xa91e14c8,
- 0x19f15785, 0x0775af4c, 0xdd99eebb, 0x607fa3fd,
- 0x2601f79f, 0xf5725cbc, 0x3b6644c5, 0x7efb5b34,
- 0x29438b76, 0xc623cbdc, 0xfcedb668, 0xf1e4b863,
- 0xdc31d7ca, 0x85634210, 0x22971340, 0x11c68420,
- 0x244a857d, 0x3dbbd2f8, 0x32f9ae11, 0xa129c76d,
- 0x2f9e1d4b, 0x30b2dcf3, 0x52860dec, 0xe3c177d0,
- 0x16b32b6c, 0xb970a999, 0x489411fa, 0x64e94722,
- 0x8cfca8c4, 0x3ff0a01a, 0x2c7d56d8, 0x903322ef,
- 0x4e4987c7, 0xd138d9c1, 0xa2ca8cfe, 0x0bd49836,
- 0x81f5a6cf, 0xde7aa528, 0x8eb7da26, 0xbfad3fa4,
- 0x9d3a2ce4, 0x9278500d, 0xcc5f6a9b, 0x467e5462,
- 0x138df6c2, 0xb8d890e8, 0xf7392e5e, 0xafc382f5,
- 0x805d9fbe, 0x93d0697c, 0x2dd56fa9, 0x1225cfb3,
- 0x99acc83b, 0x7d1810a7, 0x639ce86e, 0xbb3bdb7b,
- 0x7826cd09, 0x18596ef4, 0xb79aec01, 0x9a4f83a8,
- 0x6e95e665, 0xe6ffaa7e, 0xcfbc2108, 0xe815efe6,
- 0x9be7bad9, 0x366f4ace, 0x099fead4, 0x7cb029d6,
- 0xb2a431af, 0x233f2a31, 0x94a5c630, 0x66a235c0,
- 0xbc4e7437, 0xca82fca6, 0xd090e0b0, 0xd8a73315,
- 0x9804f14a, 0xdaec41f7, 0x50cd7f0e, 0xf691172f,
- 0xd64d768d, 0xb0ef434d, 0x4daacc54, 0x0496e4df,
- 0xb5d19ee3, 0x886a4c1b, 0x1f2cc1b8, 0x5165467f,
- 0xea5e9d04, 0x358c015d, 0x7487fa73, 0x410bfb2e,
- 0x1d67b35a, 0xd2db9252, 0x5610e933, 0x47d66d13,
- 0x61d79a8c, 0x0ca1377a, 0x14f8598e, 0x3c13eb89,
- 0x27a9ceee, 0xc961b735, 0xe51ce1ed, 0xb1477a3c,
- 0xdfd29c59, 0x73f2553f, 0xce141879, 0x37c773bf,
- 0xcdf753ea, 0xaafd5f5b, 0x6f3ddf14, 0xdb447886,
- 0xf3afca81, 0xc468b93e, 0x3424382c, 0x40a3c25f,
- 0xc31d1672, 0x25e2bc0c, 0x493c288b, 0x950dff41,
- 0x01a83971, 0xb30c08de, 0xe4b4d89c, 0xc1566490,
- 0x84cb7b61, 0xb632d570, 0x5c6c4874, 0x57b8d042
-}, {
- 0xf45150a7, 0x417e5365, 0x171ac3a4, 0x273a965e,
- 0xab3bcb6b, 0x9d1ff145, 0xfaacab58, 0xe34b9303,
- 0x302055fa, 0x76adf66d, 0xcc889176, 0x02f5254c,
- 0xe54ffcd7, 0x2ac5d7cb, 0x35268044, 0x62b58fa3,
- 0xb1de495a, 0xba25671b, 0xea45980e, 0xfe5de1c0,
- 0x2fc30275, 0x4c8112f0, 0x468da397, 0xd36bc6f9,
- 0x8f03e75f, 0x9215959c, 0x6dbfeb7a, 0x5295da59,
- 0xbed42d83, 0x7458d321, 0xe0492969, 0xc98e44c8,
- 0xc2756a89, 0x8ef47879, 0x58996b3e, 0xb927dd71,
- 0xe1beb64f, 0x88f017ad, 0x20c966ac, 0xce7db43a,
- 0xdf63184a, 0x1ae58231, 0x51976033, 0x5362457f,
- 0x64b1e077, 0x6bbb84ae, 0x81fe1ca0, 0x08f9942b,
- 0x48705868, 0x458f19fd, 0xde94876c, 0x7b52b7f8,
- 0x73ab23d3, 0x4b72e202, 0x1fe3578f, 0x55662aab,
- 0xebb20728, 0xb52f03c2, 0xc5869a7b, 0x37d3a508,
- 0x2830f287, 0xbf23b2a5, 0x0302ba6a, 0x16ed5c82,
- 0xcf8a2b1c, 0x79a792b4, 0x07f3f0f2, 0x694ea1e2,
- 0xda65cdf4, 0x0506d5be, 0x34d11f62, 0xa6c48afe,
- 0x2e349d53, 0xf3a2a055, 0x8a0532e1, 0xf6a475eb,
- 0x830b39ec, 0x6040aaef, 0x715e069f, 0x6ebd5110,
- 0x213ef98a, 0xdd963d06, 0x3eddae05, 0xe64d46bd,
- 0x5491b58d, 0xc471055d, 0x06046fd4, 0x5060ff15,
- 0x981924fb, 0xbdd697e9, 0x4089cc43, 0xd967779e,
- 0xe8b0bd42, 0x8907888b, 0x19e7385b, 0xc879dbee,
- 0x7ca1470a, 0x427ce90f, 0x84f8c91e, 0x00000000,
- 0x80098386, 0x2b3248ed, 0x111eac70, 0x5a6c4e72,
- 0x0efdfbff, 0x850f5638, 0xae3d1ed5, 0x2d362739,
- 0x0f0a64d9, 0x5c6821a6, 0x5b9bd154, 0x36243a2e,
- 0x0a0cb167, 0x57930fe7, 0xeeb4d296, 0x9b1b9e91,
- 0xc0804fc5, 0xdc61a220, 0x775a694b, 0x121c161a,
- 0x93e20aba, 0xa0c0e52a, 0x223c43e0, 0x1b121d17,
- 0x090e0b0d, 0x8bf2adc7, 0xb62db9a8, 0x1e14c8a9,
- 0xf1578519, 0x75af4c07, 0x99eebbdd, 0x7fa3fd60,
- 0x01f79f26, 0x725cbcf5, 0x6644c53b, 0xfb5b347e,
- 0x438b7629, 0x23cbdcc6, 0xedb668fc, 0xe4b863f1,
- 0x31d7cadc, 0x63421085, 0x97134022, 0xc6842011,
- 0x4a857d24, 0xbbd2f83d, 0xf9ae1132, 0x29c76da1,
- 0x9e1d4b2f, 0xb2dcf330, 0x860dec52, 0xc177d0e3,
- 0xb32b6c16, 0x70a999b9, 0x9411fa48, 0xe9472264,
- 0xfca8c48c, 0xf0a01a3f, 0x7d56d82c, 0x3322ef90,
- 0x4987c74e, 0x38d9c1d1, 0xca8cfea2, 0xd498360b,
- 0xf5a6cf81, 0x7aa528de, 0xb7da268e, 0xad3fa4bf,
- 0x3a2ce49d, 0x78500d92, 0x5f6a9bcc, 0x7e546246,
- 0x8df6c213, 0xd890e8b8, 0x392e5ef7, 0xc382f5af,
- 0x5d9fbe80, 0xd0697c93, 0xd56fa92d, 0x25cfb312,
- 0xacc83b99, 0x1810a77d, 0x9ce86e63, 0x3bdb7bbb,
- 0x26cd0978, 0x596ef418, 0x9aec01b7, 0x4f83a89a,
- 0x95e6656e, 0xffaa7ee6, 0xbc2108cf, 0x15efe6e8,
- 0xe7bad99b, 0x6f4ace36, 0x9fead409, 0xb029d67c,
- 0xa431afb2, 0x3f2a3123, 0xa5c63094, 0xa235c066,
- 0x4e7437bc, 0x82fca6ca, 0x90e0b0d0, 0xa73315d8,
- 0x04f14a98, 0xec41f7da, 0xcd7f0e50, 0x91172ff6,
- 0x4d768dd6, 0xef434db0, 0xaacc544d, 0x96e4df04,
- 0xd19ee3b5, 0x6a4c1b88, 0x2cc1b81f, 0x65467f51,
- 0x5e9d04ea, 0x8c015d35, 0x87fa7374, 0x0bfb2e41,
- 0x67b35a1d, 0xdb9252d2, 0x10e93356, 0xd66d1347,
- 0xd79a8c61, 0xa1377a0c, 0xf8598e14, 0x13eb893c,
- 0xa9ceee27, 0x61b735c9, 0x1ce1ede5, 0x477a3cb1,
- 0xd29c59df, 0xf2553f73, 0x141879ce, 0xc773bf37,
- 0xf753eacd, 0xfd5f5baa, 0x3ddf146f, 0x447886db,
- 0xafca81f3, 0x68b93ec4, 0x24382c34, 0xa3c25f40,
- 0x1d1672c3, 0xe2bc0c25, 0x3c288b49, 0x0dff4195,
- 0xa8397101, 0x0c08deb3, 0xb4d89ce4, 0x566490c1,
- 0xcb7b6184, 0x32d570b6, 0x6c48745c, 0xb8d04257
-}, {
- 0x5150a7f4, 0x7e536541, 0x1ac3a417, 0x3a965e27,
- 0x3bcb6bab, 0x1ff1459d, 0xacab58fa, 0x4b9303e3,
- 0x2055fa30, 0xadf66d76, 0x889176cc, 0xf5254c02,
- 0x4ffcd7e5, 0xc5d7cb2a, 0x26804435, 0xb58fa362,
- 0xde495ab1, 0x25671bba, 0x45980eea, 0x5de1c0fe,
- 0xc302752f, 0x8112f04c, 0x8da39746, 0x6bc6f9d3,
- 0x03e75f8f, 0x15959c92, 0xbfeb7a6d, 0x95da5952,
- 0xd42d83be, 0x58d32174, 0x492969e0, 0x8e44c8c9,
- 0x756a89c2, 0xf478798e, 0x996b3e58, 0x27dd71b9,
- 0xbeb64fe1, 0xf017ad88, 0xc966ac20, 0x7db43ace,
- 0x63184adf, 0xe582311a, 0x97603351, 0x62457f53,
- 0xb1e07764, 0xbb84ae6b, 0xfe1ca081, 0xf9942b08,
- 0x70586848, 0x8f19fd45, 0x94876cde, 0x52b7f87b,
- 0xab23d373, 0x72e2024b, 0xe3578f1f, 0x662aab55,
- 0xb20728eb, 0x2f03c2b5, 0x869a7bc5, 0xd3a50837,
- 0x30f28728, 0x23b2a5bf, 0x02ba6a03, 0xed5c8216,
- 0x8a2b1ccf, 0xa792b479, 0xf3f0f207, 0x4ea1e269,
- 0x65cdf4da, 0x06d5be05, 0xd11f6234, 0xc48afea6,
- 0x349d532e, 0xa2a055f3, 0x0532e18a, 0xa475ebf6,
- 0x0b39ec83, 0x40aaef60, 0x5e069f71, 0xbd51106e,
- 0x3ef98a21, 0x963d06dd, 0xddae053e, 0x4d46bde6,
- 0x91b58d54, 0x71055dc4, 0x046fd406, 0x60ff1550,
- 0x1924fb98, 0xd697e9bd, 0x89cc4340, 0x67779ed9,
- 0xb0bd42e8, 0x07888b89, 0xe7385b19, 0x79dbeec8,
- 0xa1470a7c, 0x7ce90f42, 0xf8c91e84, 0x00000000,
- 0x09838680, 0x3248ed2b, 0x1eac7011, 0x6c4e725a,
- 0xfdfbff0e, 0x0f563885, 0x3d1ed5ae, 0x3627392d,
- 0x0a64d90f, 0x6821a65c, 0x9bd1545b, 0x243a2e36,
- 0x0cb1670a, 0x930fe757, 0xb4d296ee, 0x1b9e919b,
- 0x804fc5c0, 0x61a220dc, 0x5a694b77, 0x1c161a12,
- 0xe20aba93, 0xc0e52aa0, 0x3c43e022, 0x121d171b,
- 0x0e0b0d09, 0xf2adc78b, 0x2db9a8b6, 0x14c8a91e,
- 0x578519f1, 0xaf4c0775, 0xeebbdd99, 0xa3fd607f,
- 0xf79f2601, 0x5cbcf572, 0x44c53b66, 0x5b347efb,
- 0x8b762943, 0xcbdcc623, 0xb668fced, 0xb863f1e4,
- 0xd7cadc31, 0x42108563, 0x13402297, 0x842011c6,
- 0x857d244a, 0xd2f83dbb, 0xae1132f9, 0xc76da129,
- 0x1d4b2f9e, 0xdcf330b2, 0x0dec5286, 0x77d0e3c1,
- 0x2b6c16b3, 0xa999b970, 0x11fa4894, 0x472264e9,
- 0xa8c48cfc, 0xa01a3ff0, 0x56d82c7d, 0x22ef9033,
- 0x87c74e49, 0xd9c1d138, 0x8cfea2ca, 0x98360bd4,
- 0xa6cf81f5, 0xa528de7a, 0xda268eb7, 0x3fa4bfad,
- 0x2ce49d3a, 0x500d9278, 0x6a9bcc5f, 0x5462467e,
- 0xf6c2138d, 0x90e8b8d8, 0x2e5ef739, 0x82f5afc3,
- 0x9fbe805d, 0x697c93d0, 0x6fa92dd5, 0xcfb31225,
- 0xc83b99ac, 0x10a77d18, 0xe86e639c, 0xdb7bbb3b,
- 0xcd097826, 0x6ef41859, 0xec01b79a, 0x83a89a4f,
- 0xe6656e95, 0xaa7ee6ff, 0x2108cfbc, 0xefe6e815,
- 0xbad99be7, 0x4ace366f, 0xead4099f, 0x29d67cb0,
- 0x31afb2a4, 0x2a31233f, 0xc63094a5, 0x35c066a2,
- 0x7437bc4e, 0xfca6ca82, 0xe0b0d090, 0x3315d8a7,
- 0xf14a9804, 0x41f7daec, 0x7f0e50cd, 0x172ff691,
- 0x768dd64d, 0x434db0ef, 0xcc544daa, 0xe4df0496,
- 0x9ee3b5d1, 0x4c1b886a, 0xc1b81f2c, 0x467f5165,
- 0x9d04ea5e, 0x015d358c, 0xfa737487, 0xfb2e410b,
- 0xb35a1d67, 0x9252d2db, 0xe9335610, 0x6d1347d6,
- 0x9a8c61d7, 0x377a0ca1, 0x598e14f8, 0xeb893c13,
- 0xceee27a9, 0xb735c961, 0xe1ede51c, 0x7a3cb147,
- 0x9c59dfd2, 0x553f73f2, 0x1879ce14, 0x73bf37c7,
- 0x53eacdf7, 0x5f5baafd, 0xdf146f3d, 0x7886db44,
- 0xca81f3af, 0xb93ec468, 0x382c3424, 0xc25f40a3,
- 0x1672c31d, 0xbc0c25e2, 0x288b493c, 0xff41950d,
- 0x397101a8, 0x08deb30c, 0xd89ce4b4, 0x6490c156,
- 0x7b6184cb, 0xd570b632, 0x48745c6c, 0xd04257b8
-}
-};
-
-static const u4byte fl_tab[4][256] = {
-{
- 0x00000063, 0x0000007c, 0x00000077, 0x0000007b,
- 0x000000f2, 0x0000006b, 0x0000006f, 0x000000c5,
- 0x00000030, 0x00000001, 0x00000067, 0x0000002b,
- 0x000000fe, 0x000000d7, 0x000000ab, 0x00000076,
- 0x000000ca, 0x00000082, 0x000000c9, 0x0000007d,
- 0x000000fa, 0x00000059, 0x00000047, 0x000000f0,
- 0x000000ad, 0x000000d4, 0x000000a2, 0x000000af,
- 0x0000009c, 0x000000a4, 0x00000072, 0x000000c0,
- 0x000000b7, 0x000000fd, 0x00000093, 0x00000026,
- 0x00000036, 0x0000003f, 0x000000f7, 0x000000cc,
- 0x00000034, 0x000000a5, 0x000000e5, 0x000000f1,
- 0x00000071, 0x000000d8, 0x00000031, 0x00000015,
- 0x00000004, 0x000000c7, 0x00000023, 0x000000c3,
- 0x00000018, 0x00000096, 0x00000005, 0x0000009a,
- 0x00000007, 0x00000012, 0x00000080, 0x000000e2,
- 0x000000eb, 0x00000027, 0x000000b2, 0x00000075,
- 0x00000009, 0x00000083, 0x0000002c, 0x0000001a,
- 0x0000001b, 0x0000006e, 0x0000005a, 0x000000a0,
- 0x00000052, 0x0000003b, 0x000000d6, 0x000000b3,
- 0x00000029, 0x000000e3, 0x0000002f, 0x00000084,
- 0x00000053, 0x000000d1, 0x00000000, 0x000000ed,
- 0x00000020, 0x000000fc, 0x000000b1, 0x0000005b,
- 0x0000006a, 0x000000cb, 0x000000be, 0x00000039,
- 0x0000004a, 0x0000004c, 0x00000058, 0x000000cf,
- 0x000000d0, 0x000000ef, 0x000000aa, 0x000000fb,
- 0x00000043, 0x0000004d, 0x00000033, 0x00000085,
- 0x00000045, 0x000000f9, 0x00000002, 0x0000007f,
- 0x00000050, 0x0000003c, 0x0000009f, 0x000000a8,
- 0x00000051, 0x000000a3, 0x00000040, 0x0000008f,
- 0x00000092, 0x0000009d, 0x00000038, 0x000000f5,
- 0x000000bc, 0x000000b6, 0x000000da, 0x00000021,
- 0x00000010, 0x000000ff, 0x000000f3, 0x000000d2,
- 0x000000cd, 0x0000000c, 0x00000013, 0x000000ec,
- 0x0000005f, 0x00000097, 0x00000044, 0x00000017,
- 0x000000c4, 0x000000a7, 0x0000007e, 0x0000003d,
- 0x00000064, 0x0000005d, 0x00000019, 0x00000073,
- 0x00000060, 0x00000081, 0x0000004f, 0x000000dc,
- 0x00000022, 0x0000002a, 0x00000090, 0x00000088,
- 0x00000046, 0x000000ee, 0x000000b8, 0x00000014,
- 0x000000de, 0x0000005e, 0x0000000b, 0x000000db,
- 0x000000e0, 0x00000032, 0x0000003a, 0x0000000a,
- 0x00000049, 0x00000006, 0x00000024, 0x0000005c,
- 0x000000c2, 0x000000d3, 0x000000ac, 0x00000062,
- 0x00000091, 0x00000095, 0x000000e4, 0x00000079,
- 0x000000e7, 0x000000c8, 0x00000037, 0x0000006d,
- 0x0000008d, 0x000000d5, 0x0000004e, 0x000000a9,
- 0x0000006c, 0x00000056, 0x000000f4, 0x000000ea,
- 0x00000065, 0x0000007a, 0x000000ae, 0x00000008,
- 0x000000ba, 0x00000078, 0x00000025, 0x0000002e,
- 0x0000001c, 0x000000a6, 0x000000b4, 0x000000c6,
- 0x000000e8, 0x000000dd, 0x00000074, 0x0000001f,
- 0x0000004b, 0x000000bd, 0x0000008b, 0x0000008a,
- 0x00000070, 0x0000003e, 0x000000b5, 0x00000066,
- 0x00000048, 0x00000003, 0x000000f6, 0x0000000e,
- 0x00000061, 0x00000035, 0x00000057, 0x000000b9,
- 0x00000086, 0x000000c1, 0x0000001d, 0x0000009e,
- 0x000000e1, 0x000000f8, 0x00000098, 0x00000011,
- 0x00000069, 0x000000d9, 0x0000008e, 0x00000094,
- 0x0000009b, 0x0000001e, 0x00000087, 0x000000e9,
- 0x000000ce, 0x00000055, 0x00000028, 0x000000df,
- 0x0000008c, 0x000000a1, 0x00000089, 0x0000000d,
- 0x000000bf, 0x000000e6, 0x00000042, 0x00000068,
- 0x00000041, 0x00000099, 0x0000002d, 0x0000000f,
- 0x000000b0, 0x00000054, 0x000000bb, 0x00000016
-}, {
- 0x00006300, 0x00007c00, 0x00007700, 0x00007b00,
- 0x0000f200, 0x00006b00, 0x00006f00, 0x0000c500,
- 0x00003000, 0x00000100, 0x00006700, 0x00002b00,
- 0x0000fe00, 0x0000d700, 0x0000ab00, 0x00007600,
- 0x0000ca00, 0x00008200, 0x0000c900, 0x00007d00,
- 0x0000fa00, 0x00005900, 0x00004700, 0x0000f000,
- 0x0000ad00, 0x0000d400, 0x0000a200, 0x0000af00,
- 0x00009c00, 0x0000a400, 0x00007200, 0x0000c000,
- 0x0000b700, 0x0000fd00, 0x00009300, 0x00002600,
- 0x00003600, 0x00003f00, 0x0000f700, 0x0000cc00,
- 0x00003400, 0x0000a500, 0x0000e500, 0x0000f100,
- 0x00007100, 0x0000d800, 0x00003100, 0x00001500,
- 0x00000400, 0x0000c700, 0x00002300, 0x0000c300,
- 0x00001800, 0x00009600, 0x00000500, 0x00009a00,
- 0x00000700, 0x00001200, 0x00008000, 0x0000e200,
- 0x0000eb00, 0x00002700, 0x0000b200, 0x00007500,
- 0x00000900, 0x00008300, 0x00002c00, 0x00001a00,
- 0x00001b00, 0x00006e00, 0x00005a00, 0x0000a000,
- 0x00005200, 0x00003b00, 0x0000d600, 0x0000b300,
- 0x00002900, 0x0000e300, 0x00002f00, 0x00008400,
- 0x00005300, 0x0000d100, 0x00000000, 0x0000ed00,
- 0x00002000, 0x0000fc00, 0x0000b100, 0x00005b00,
- 0x00006a00, 0x0000cb00, 0x0000be00, 0x00003900,
- 0x00004a00, 0x00004c00, 0x00005800, 0x0000cf00,
- 0x0000d000, 0x0000ef00, 0x0000aa00, 0x0000fb00,
- 0x00004300, 0x00004d00, 0x00003300, 0x00008500,
- 0x00004500, 0x0000f900, 0x00000200, 0x00007f00,
- 0x00005000, 0x00003c00, 0x00009f00, 0x0000a800,
- 0x00005100, 0x0000a300, 0x00004000, 0x00008f00,
- 0x00009200, 0x00009d00, 0x00003800, 0x0000f500,
- 0x0000bc00, 0x0000b600, 0x0000da00, 0x00002100,
- 0x00001000, 0x0000ff00, 0x0000f300, 0x0000d200,
- 0x0000cd00, 0x00000c00, 0x00001300, 0x0000ec00,
- 0x00005f00, 0x00009700, 0x00004400, 0x00001700,
- 0x0000c400, 0x0000a700, 0x00007e00, 0x00003d00,
- 0x00006400, 0x00005d00, 0x00001900, 0x00007300,
- 0x00006000, 0x00008100, 0x00004f00, 0x0000dc00,
- 0x00002200, 0x00002a00, 0x00009000, 0x00008800,
- 0x00004600, 0x0000ee00, 0x0000b800, 0x00001400,
- 0x0000de00, 0x00005e00, 0x00000b00, 0x0000db00,
- 0x0000e000, 0x00003200, 0x00003a00, 0x00000a00,
- 0x00004900, 0x00000600, 0x00002400, 0x00005c00,
- 0x0000c200, 0x0000d300, 0x0000ac00, 0x00006200,
- 0x00009100, 0x00009500, 0x0000e400, 0x00007900,
- 0x0000e700, 0x0000c800, 0x00003700, 0x00006d00,
- 0x00008d00, 0x0000d500, 0x00004e00, 0x0000a900,
- 0x00006c00, 0x00005600, 0x0000f400, 0x0000ea00,
- 0x00006500, 0x00007a00, 0x0000ae00, 0x00000800,
- 0x0000ba00, 0x00007800, 0x00002500, 0x00002e00,
- 0x00001c00, 0x0000a600, 0x0000b400, 0x0000c600,
- 0x0000e800, 0x0000dd00, 0x00007400, 0x00001f00,
- 0x00004b00, 0x0000bd00, 0x00008b00, 0x00008a00,
- 0x00007000, 0x00003e00, 0x0000b500, 0x00006600,
- 0x00004800, 0x00000300, 0x0000f600, 0x00000e00,
- 0x00006100, 0x00003500, 0x00005700, 0x0000b900,
- 0x00008600, 0x0000c100, 0x00001d00, 0x00009e00,
- 0x0000e100, 0x0000f800, 0x00009800, 0x00001100,
- 0x00006900, 0x0000d900, 0x00008e00, 0x00009400,
- 0x00009b00, 0x00001e00, 0x00008700, 0x0000e900,
- 0x0000ce00, 0x00005500, 0x00002800, 0x0000df00,
- 0x00008c00, 0x0000a100, 0x00008900, 0x00000d00,
- 0x0000bf00, 0x0000e600, 0x00004200, 0x00006800,
- 0x00004100, 0x00009900, 0x00002d00, 0x00000f00,
- 0x0000b000, 0x00005400, 0x0000bb00, 0x00001600
-}, {
- 0x00630000, 0x007c0000, 0x00770000, 0x007b0000,
- 0x00f20000, 0x006b0000, 0x006f0000, 0x00c50000,
- 0x00300000, 0x00010000, 0x00670000, 0x002b0000,
- 0x00fe0000, 0x00d70000, 0x00ab0000, 0x00760000,
- 0x00ca0000, 0x00820000, 0x00c90000, 0x007d0000,
- 0x00fa0000, 0x00590000, 0x00470000, 0x00f00000,
- 0x00ad0000, 0x00d40000, 0x00a20000, 0x00af0000,
- 0x009c0000, 0x00a40000, 0x00720000, 0x00c00000,
- 0x00b70000, 0x00fd0000, 0x00930000, 0x00260000,
- 0x00360000, 0x003f0000, 0x00f70000, 0x00cc0000,
- 0x00340000, 0x00a50000, 0x00e50000, 0x00f10000,
- 0x00710000, 0x00d80000, 0x00310000, 0x00150000,
- 0x00040000, 0x00c70000, 0x00230000, 0x00c30000,
- 0x00180000, 0x00960000, 0x00050000, 0x009a0000,
- 0x00070000, 0x00120000, 0x00800000, 0x00e20000,
- 0x00eb0000, 0x00270000, 0x00b20000, 0x00750000,
- 0x00090000, 0x00830000, 0x002c0000, 0x001a0000,
- 0x001b0000, 0x006e0000, 0x005a0000, 0x00a00000,
- 0x00520000, 0x003b0000, 0x00d60000, 0x00b30000,
- 0x00290000, 0x00e30000, 0x002f0000, 0x00840000,
- 0x00530000, 0x00d10000, 0x00000000, 0x00ed0000,
- 0x00200000, 0x00fc0000, 0x00b10000, 0x005b0000,
- 0x006a0000, 0x00cb0000, 0x00be0000, 0x00390000,
- 0x004a0000, 0x004c0000, 0x00580000, 0x00cf0000,
- 0x00d00000, 0x00ef0000, 0x00aa0000, 0x00fb0000,
- 0x00430000, 0x004d0000, 0x00330000, 0x00850000,
- 0x00450000, 0x00f90000, 0x00020000, 0x007f0000,
- 0x00500000, 0x003c0000, 0x009f0000, 0x00a80000,
- 0x00510000, 0x00a30000, 0x00400000, 0x008f0000,
- 0x00920000, 0x009d0000, 0x00380000, 0x00f50000,
- 0x00bc0000, 0x00b60000, 0x00da0000, 0x00210000,
- 0x00100000, 0x00ff0000, 0x00f30000, 0x00d20000,
- 0x00cd0000, 0x000c0000, 0x00130000, 0x00ec0000,
- 0x005f0000, 0x00970000, 0x00440000, 0x00170000,
- 0x00c40000, 0x00a70000, 0x007e0000, 0x003d0000,
- 0x00640000, 0x005d0000, 0x00190000, 0x00730000,
- 0x00600000, 0x00810000, 0x004f0000, 0x00dc0000,
- 0x00220000, 0x002a0000, 0x00900000, 0x00880000,
- 0x00460000, 0x00ee0000, 0x00b80000, 0x00140000,
- 0x00de0000, 0x005e0000, 0x000b0000, 0x00db0000,
- 0x00e00000, 0x00320000, 0x003a0000, 0x000a0000,
- 0x00490000, 0x00060000, 0x00240000, 0x005c0000,
- 0x00c20000, 0x00d30000, 0x00ac0000, 0x00620000,
- 0x00910000, 0x00950000, 0x00e40000, 0x00790000,
- 0x00e70000, 0x00c80000, 0x00370000, 0x006d0000,
- 0x008d0000, 0x00d50000, 0x004e0000, 0x00a90000,
- 0x006c0000, 0x00560000, 0x00f40000, 0x00ea0000,
- 0x00650000, 0x007a0000, 0x00ae0000, 0x00080000,
- 0x00ba0000, 0x00780000, 0x00250000, 0x002e0000,
- 0x001c0000, 0x00a60000, 0x00b40000, 0x00c60000,
- 0x00e80000, 0x00dd0000, 0x00740000, 0x001f0000,
- 0x004b0000, 0x00bd0000, 0x008b0000, 0x008a0000,
- 0x00700000, 0x003e0000, 0x00b50000, 0x00660000,
- 0x00480000, 0x00030000, 0x00f60000, 0x000e0000,
- 0x00610000, 0x00350000, 0x00570000, 0x00b90000,
- 0x00860000, 0x00c10000, 0x001d0000, 0x009e0000,
- 0x00e10000, 0x00f80000, 0x00980000, 0x00110000,
- 0x00690000, 0x00d90000, 0x008e0000, 0x00940000,
- 0x009b0000, 0x001e0000, 0x00870000, 0x00e90000,
- 0x00ce0000, 0x00550000, 0x00280000, 0x00df0000,
- 0x008c0000, 0x00a10000, 0x00890000, 0x000d0000,
- 0x00bf0000, 0x00e60000, 0x00420000, 0x00680000,
- 0x00410000, 0x00990000, 0x002d0000, 0x000f0000,
- 0x00b00000, 0x00540000, 0x00bb0000, 0x00160000
-}, {
- 0x63000000, 0x7c000000, 0x77000000, 0x7b000000,
- 0xf2000000, 0x6b000000, 0x6f000000, 0xc5000000,
- 0x30000000, 0x01000000, 0x67000000, 0x2b000000,
- 0xfe000000, 0xd7000000, 0xab000000, 0x76000000,
- 0xca000000, 0x82000000, 0xc9000000, 0x7d000000,
- 0xfa000000, 0x59000000, 0x47000000, 0xf0000000,
- 0xad000000, 0xd4000000, 0xa2000000, 0xaf000000,
- 0x9c000000, 0xa4000000, 0x72000000, 0xc0000000,
- 0xb7000000, 0xfd000000, 0x93000000, 0x26000000,
- 0x36000000, 0x3f000000, 0xf7000000, 0xcc000000,
- 0x34000000, 0xa5000000, 0xe5000000, 0xf1000000,
- 0x71000000, 0xd8000000, 0x31000000, 0x15000000,
- 0x04000000, 0xc7000000, 0x23000000, 0xc3000000,
- 0x18000000, 0x96000000, 0x05000000, 0x9a000000,
- 0x07000000, 0x12000000, 0x80000000, 0xe2000000,
- 0xeb000000, 0x27000000, 0xb2000000, 0x75000000,
- 0x09000000, 0x83000000, 0x2c000000, 0x1a000000,
- 0x1b000000, 0x6e000000, 0x5a000000, 0xa0000000,
- 0x52000000, 0x3b000000, 0xd6000000, 0xb3000000,
- 0x29000000, 0xe3000000, 0x2f000000, 0x84000000,
- 0x53000000, 0xd1000000, 0x00000000, 0xed000000,
- 0x20000000, 0xfc000000, 0xb1000000, 0x5b000000,
- 0x6a000000, 0xcb000000, 0xbe000000, 0x39000000,
- 0x4a000000, 0x4c000000, 0x58000000, 0xcf000000,
- 0xd0000000, 0xef000000, 0xaa000000, 0xfb000000,
- 0x43000000, 0x4d000000, 0x33000000, 0x85000000,
- 0x45000000, 0xf9000000, 0x02000000, 0x7f000000,
- 0x50000000, 0x3c000000, 0x9f000000, 0xa8000000,
- 0x51000000, 0xa3000000, 0x40000000, 0x8f000000,
- 0x92000000, 0x9d000000, 0x38000000, 0xf5000000,
- 0xbc000000, 0xb6000000, 0xda000000, 0x21000000,
- 0x10000000, 0xff000000, 0xf3000000, 0xd2000000,
- 0xcd000000, 0x0c000000, 0x13000000, 0xec000000,
- 0x5f000000, 0x97000000, 0x44000000, 0x17000000,
- 0xc4000000, 0xa7000000, 0x7e000000, 0x3d000000,
- 0x64000000, 0x5d000000, 0x19000000, 0x73000000,
- 0x60000000, 0x81000000, 0x4f000000, 0xdc000000,
- 0x22000000, 0x2a000000, 0x90000000, 0x88000000,
- 0x46000000, 0xee000000, 0xb8000000, 0x14000000,
- 0xde000000, 0x5e000000, 0x0b000000, 0xdb000000,
- 0xe0000000, 0x32000000, 0x3a000000, 0x0a000000,
- 0x49000000, 0x06000000, 0x24000000, 0x5c000000,
- 0xc2000000, 0xd3000000, 0xac000000, 0x62000000,
- 0x91000000, 0x95000000, 0xe4000000, 0x79000000,
- 0xe7000000, 0xc8000000, 0x37000000, 0x6d000000,
- 0x8d000000, 0xd5000000, 0x4e000000, 0xa9000000,
- 0x6c000000, 0x56000000, 0xf4000000, 0xea000000,
- 0x65000000, 0x7a000000, 0xae000000, 0x08000000,
- 0xba000000, 0x78000000, 0x25000000, 0x2e000000,
- 0x1c000000, 0xa6000000, 0xb4000000, 0xc6000000,
- 0xe8000000, 0xdd000000, 0x74000000, 0x1f000000,
- 0x4b000000, 0xbd000000, 0x8b000000, 0x8a000000,
- 0x70000000, 0x3e000000, 0xb5000000, 0x66000000,
- 0x48000000, 0x03000000, 0xf6000000, 0x0e000000,
- 0x61000000, 0x35000000, 0x57000000, 0xb9000000,
- 0x86000000, 0xc1000000, 0x1d000000, 0x9e000000,
- 0xe1000000, 0xf8000000, 0x98000000, 0x11000000,
- 0x69000000, 0xd9000000, 0x8e000000, 0x94000000,
- 0x9b000000, 0x1e000000, 0x87000000, 0xe9000000,
- 0xce000000, 0x55000000, 0x28000000, 0xdf000000,
- 0x8c000000, 0xa1000000, 0x89000000, 0x0d000000,
- 0xbf000000, 0xe6000000, 0x42000000, 0x68000000,
- 0x41000000, 0x99000000, 0x2d000000, 0x0f000000,
- 0xb0000000, 0x54000000, 0xbb000000, 0x16000000
-}
-};
-
-static const u4byte il_tab[4][256] = {
-{
- 0x00000052, 0x00000009, 0x0000006a, 0x000000d5,
- 0x00000030, 0x00000036, 0x000000a5, 0x00000038,
- 0x000000bf, 0x00000040, 0x000000a3, 0x0000009e,
- 0x00000081, 0x000000f3, 0x000000d7, 0x000000fb,
- 0x0000007c, 0x000000e3, 0x00000039, 0x00000082,
- 0x0000009b, 0x0000002f, 0x000000ff, 0x00000087,
- 0x00000034, 0x0000008e, 0x00000043, 0x00000044,
- 0x000000c4, 0x000000de, 0x000000e9, 0x000000cb,
- 0x00000054, 0x0000007b, 0x00000094, 0x00000032,
- 0x000000a6, 0x000000c2, 0x00000023, 0x0000003d,
- 0x000000ee, 0x0000004c, 0x00000095, 0x0000000b,
- 0x00000042, 0x000000fa, 0x000000c3, 0x0000004e,
- 0x00000008, 0x0000002e, 0x000000a1, 0x00000066,
- 0x00000028, 0x000000d9, 0x00000024, 0x000000b2,
- 0x00000076, 0x0000005b, 0x000000a2, 0x00000049,
- 0x0000006d, 0x0000008b, 0x000000d1, 0x00000025,
- 0x00000072, 0x000000f8, 0x000000f6, 0x00000064,
- 0x00000086, 0x00000068, 0x00000098, 0x00000016,
- 0x000000d4, 0x000000a4, 0x0000005c, 0x000000cc,
- 0x0000005d, 0x00000065, 0x000000b6, 0x00000092,
- 0x0000006c, 0x00000070, 0x00000048, 0x00000050,
- 0x000000fd, 0x000000ed, 0x000000b9, 0x000000da,
- 0x0000005e, 0x00000015, 0x00000046, 0x00000057,
- 0x000000a7, 0x0000008d, 0x0000009d, 0x00000084,
- 0x00000090, 0x000000d8, 0x000000ab, 0x00000000,
- 0x0000008c, 0x000000bc, 0x000000d3, 0x0000000a,
- 0x000000f7, 0x000000e4, 0x00000058, 0x00000005,
- 0x000000b8, 0x000000b3, 0x00000045, 0x00000006,
- 0x000000d0, 0x0000002c, 0x0000001e, 0x0000008f,
- 0x000000ca, 0x0000003f, 0x0000000f, 0x00000002,
- 0x000000c1, 0x000000af, 0x000000bd, 0x00000003,
- 0x00000001, 0x00000013, 0x0000008a, 0x0000006b,
- 0x0000003a, 0x00000091, 0x00000011, 0x00000041,
- 0x0000004f, 0x00000067, 0x000000dc, 0x000000ea,
- 0x00000097, 0x000000f2, 0x000000cf, 0x000000ce,
- 0x000000f0, 0x000000b4, 0x000000e6, 0x00000073,
- 0x00000096, 0x000000ac, 0x00000074, 0x00000022,
- 0x000000e7, 0x000000ad, 0x00000035, 0x00000085,
- 0x000000e2, 0x000000f9, 0x00000037, 0x000000e8,
- 0x0000001c, 0x00000075, 0x000000df, 0x0000006e,
- 0x00000047, 0x000000f1, 0x0000001a, 0x00000071,
- 0x0000001d, 0x00000029, 0x000000c5, 0x00000089,
- 0x0000006f, 0x000000b7, 0x00000062, 0x0000000e,
- 0x000000aa, 0x00000018, 0x000000be, 0x0000001b,
- 0x000000fc, 0x00000056, 0x0000003e, 0x0000004b,
- 0x000000c6, 0x000000d2, 0x00000079, 0x00000020,
- 0x0000009a, 0x000000db, 0x000000c0, 0x000000fe,
- 0x00000078, 0x000000cd, 0x0000005a, 0x000000f4,
- 0x0000001f, 0x000000dd, 0x000000a8, 0x00000033,
- 0x00000088, 0x00000007, 0x000000c7, 0x00000031,
- 0x000000b1, 0x00000012, 0x00000010, 0x00000059,
- 0x00000027, 0x00000080, 0x000000ec, 0x0000005f,
- 0x00000060, 0x00000051, 0x0000007f, 0x000000a9,
- 0x00000019, 0x000000b5, 0x0000004a, 0x0000000d,
- 0x0000002d, 0x000000e5, 0x0000007a, 0x0000009f,
- 0x00000093, 0x000000c9, 0x0000009c, 0x000000ef,
- 0x000000a0, 0x000000e0, 0x0000003b, 0x0000004d,
- 0x000000ae, 0x0000002a, 0x000000f5, 0x000000b0,
- 0x000000c8, 0x000000eb, 0x000000bb, 0x0000003c,
- 0x00000083, 0x00000053, 0x00000099, 0x00000061,
- 0x00000017, 0x0000002b, 0x00000004, 0x0000007e,
- 0x000000ba, 0x00000077, 0x000000d6, 0x00000026,
- 0x000000e1, 0x00000069, 0x00000014, 0x00000063,
- 0x00000055, 0x00000021, 0x0000000c, 0x0000007d
-}, {
- 0x00005200, 0x00000900, 0x00006a00, 0x0000d500,
- 0x00003000, 0x00003600, 0x0000a500, 0x00003800,
- 0x0000bf00, 0x00004000, 0x0000a300, 0x00009e00,
- 0x00008100, 0x0000f300, 0x0000d700, 0x0000fb00,
- 0x00007c00, 0x0000e300, 0x00003900, 0x00008200,
- 0x00009b00, 0x00002f00, 0x0000ff00, 0x00008700,
- 0x00003400, 0x00008e00, 0x00004300, 0x00004400,
- 0x0000c400, 0x0000de00, 0x0000e900, 0x0000cb00,
- 0x00005400, 0x00007b00, 0x00009400, 0x00003200,
- 0x0000a600, 0x0000c200, 0x00002300, 0x00003d00,
- 0x0000ee00, 0x00004c00, 0x00009500, 0x00000b00,
- 0x00004200, 0x0000fa00, 0x0000c300, 0x00004e00,
- 0x00000800, 0x00002e00, 0x0000a100, 0x00006600,
- 0x00002800, 0x0000d900, 0x00002400, 0x0000b200,
- 0x00007600, 0x00005b00, 0x0000a200, 0x00004900,
- 0x00006d00, 0x00008b00, 0x0000d100, 0x00002500,
- 0x00007200, 0x0000f800, 0x0000f600, 0x00006400,
- 0x00008600, 0x00006800, 0x00009800, 0x00001600,
- 0x0000d400, 0x0000a400, 0x00005c00, 0x0000cc00,
- 0x00005d00, 0x00006500, 0x0000b600, 0x00009200,
- 0x00006c00, 0x00007000, 0x00004800, 0x00005000,
- 0x0000fd00, 0x0000ed00, 0x0000b900, 0x0000da00,
- 0x00005e00, 0x00001500, 0x00004600, 0x00005700,
- 0x0000a700, 0x00008d00, 0x00009d00, 0x00008400,
- 0x00009000, 0x0000d800, 0x0000ab00, 0x00000000,
- 0x00008c00, 0x0000bc00, 0x0000d300, 0x00000a00,
- 0x0000f700, 0x0000e400, 0x00005800, 0x00000500,
- 0x0000b800, 0x0000b300, 0x00004500, 0x00000600,
- 0x0000d000, 0x00002c00, 0x00001e00, 0x00008f00,
- 0x0000ca00, 0x00003f00, 0x00000f00, 0x00000200,
- 0x0000c100, 0x0000af00, 0x0000bd00, 0x00000300,
- 0x00000100, 0x00001300, 0x00008a00, 0x00006b00,
- 0x00003a00, 0x00009100, 0x00001100, 0x00004100,
- 0x00004f00, 0x00006700, 0x0000dc00, 0x0000ea00,
- 0x00009700, 0x0000f200, 0x0000cf00, 0x0000ce00,
- 0x0000f000, 0x0000b400, 0x0000e600, 0x00007300,
- 0x00009600, 0x0000ac00, 0x00007400, 0x00002200,
- 0x0000e700, 0x0000ad00, 0x00003500, 0x00008500,
- 0x0000e200, 0x0000f900, 0x00003700, 0x0000e800,
- 0x00001c00, 0x00007500, 0x0000df00, 0x00006e00,
- 0x00004700, 0x0000f100, 0x00001a00, 0x00007100,
- 0x00001d00, 0x00002900, 0x0000c500, 0x00008900,
- 0x00006f00, 0x0000b700, 0x00006200, 0x00000e00,
- 0x0000aa00, 0x00001800, 0x0000be00, 0x00001b00,
- 0x0000fc00, 0x00005600, 0x00003e00, 0x00004b00,
- 0x0000c600, 0x0000d200, 0x00007900, 0x00002000,
- 0x00009a00, 0x0000db00, 0x0000c000, 0x0000fe00,
- 0x00007800, 0x0000cd00, 0x00005a00, 0x0000f400,
- 0x00001f00, 0x0000dd00, 0x0000a800, 0x00003300,
- 0x00008800, 0x00000700, 0x0000c700, 0x00003100,
- 0x0000b100, 0x00001200, 0x00001000, 0x00005900,
- 0x00002700, 0x00008000, 0x0000ec00, 0x00005f00,
- 0x00006000, 0x00005100, 0x00007f00, 0x0000a900,
- 0x00001900, 0x0000b500, 0x00004a00, 0x00000d00,
- 0x00002d00, 0x0000e500, 0x00007a00, 0x00009f00,
- 0x00009300, 0x0000c900, 0x00009c00, 0x0000ef00,
- 0x0000a000, 0x0000e000, 0x00003b00, 0x00004d00,
- 0x0000ae00, 0x00002a00, 0x0000f500, 0x0000b000,
- 0x0000c800, 0x0000eb00, 0x0000bb00, 0x00003c00,
- 0x00008300, 0x00005300, 0x00009900, 0x00006100,
- 0x00001700, 0x00002b00, 0x00000400, 0x00007e00,
- 0x0000ba00, 0x00007700, 0x0000d600, 0x00002600,
- 0x0000e100, 0x00006900, 0x00001400, 0x00006300,
- 0x00005500, 0x00002100, 0x00000c00, 0x00007d00
-}, {
- 0x00520000, 0x00090000, 0x006a0000, 0x00d50000,
- 0x00300000, 0x00360000, 0x00a50000, 0x00380000,
- 0x00bf0000, 0x00400000, 0x00a30000, 0x009e0000,
- 0x00810000, 0x00f30000, 0x00d70000, 0x00fb0000,
- 0x007c0000, 0x00e30000, 0x00390000, 0x00820000,
- 0x009b0000, 0x002f0000, 0x00ff0000, 0x00870000,
- 0x00340000, 0x008e0000, 0x00430000, 0x00440000,
- 0x00c40000, 0x00de0000, 0x00e90000, 0x00cb0000,
- 0x00540000, 0x007b0000, 0x00940000, 0x00320000,
- 0x00a60000, 0x00c20000, 0x00230000, 0x003d0000,
- 0x00ee0000, 0x004c0000, 0x00950000, 0x000b0000,
- 0x00420000, 0x00fa0000, 0x00c30000, 0x004e0000,
- 0x00080000, 0x002e0000, 0x00a10000, 0x00660000,
- 0x00280000, 0x00d90000, 0x00240000, 0x00b20000,
- 0x00760000, 0x005b0000, 0x00a20000, 0x00490000,
- 0x006d0000, 0x008b0000, 0x00d10000, 0x00250000,
- 0x00720000, 0x00f80000, 0x00f60000, 0x00640000,
- 0x00860000, 0x00680000, 0x00980000, 0x00160000,
- 0x00d40000, 0x00a40000, 0x005c0000, 0x00cc0000,
- 0x005d0000, 0x00650000, 0x00b60000, 0x00920000,
- 0x006c0000, 0x00700000, 0x00480000, 0x00500000,
- 0x00fd0000, 0x00ed0000, 0x00b90000, 0x00da0000,
- 0x005e0000, 0x00150000, 0x00460000, 0x00570000,
- 0x00a70000, 0x008d0000, 0x009d0000, 0x00840000,
- 0x00900000, 0x00d80000, 0x00ab0000, 0x00000000,
- 0x008c0000, 0x00bc0000, 0x00d30000, 0x000a0000,
- 0x00f70000, 0x00e40000, 0x00580000, 0x00050000,
- 0x00b80000, 0x00b30000, 0x00450000, 0x00060000,
- 0x00d00000, 0x002c0000, 0x001e0000, 0x008f0000,
- 0x00ca0000, 0x003f0000, 0x000f0000, 0x00020000,
- 0x00c10000, 0x00af0000, 0x00bd0000, 0x00030000,
- 0x00010000, 0x00130000, 0x008a0000, 0x006b0000,
- 0x003a0000, 0x00910000, 0x00110000, 0x00410000,
- 0x004f0000, 0x00670000, 0x00dc0000, 0x00ea0000,
- 0x00970000, 0x00f20000, 0x00cf0000, 0x00ce0000,
- 0x00f00000, 0x00b40000, 0x00e60000, 0x00730000,
- 0x00960000, 0x00ac0000, 0x00740000, 0x00220000,
- 0x00e70000, 0x00ad0000, 0x00350000, 0x00850000,
- 0x00e20000, 0x00f90000, 0x00370000, 0x00e80000,
- 0x001c0000, 0x00750000, 0x00df0000, 0x006e0000,
- 0x00470000, 0x00f10000, 0x001a0000, 0x00710000,
- 0x001d0000, 0x00290000, 0x00c50000, 0x00890000,
- 0x006f0000, 0x00b70000, 0x00620000, 0x000e0000,
- 0x00aa0000, 0x00180000, 0x00be0000, 0x001b0000,
- 0x00fc0000, 0x00560000, 0x003e0000, 0x004b0000,
- 0x00c60000, 0x00d20000, 0x00790000, 0x00200000,
- 0x009a0000, 0x00db0000, 0x00c00000, 0x00fe0000,
- 0x00780000, 0x00cd0000, 0x005a0000, 0x00f40000,
- 0x001f0000, 0x00dd0000, 0x00a80000, 0x00330000,
- 0x00880000, 0x00070000, 0x00c70000, 0x00310000,
- 0x00b10000, 0x00120000, 0x00100000, 0x00590000,
- 0x00270000, 0x00800000, 0x00ec0000, 0x005f0000,
- 0x00600000, 0x00510000, 0x007f0000, 0x00a90000,
- 0x00190000, 0x00b50000, 0x004a0000, 0x000d0000,
- 0x002d0000, 0x00e50000, 0x007a0000, 0x009f0000,
- 0x00930000, 0x00c90000, 0x009c0000, 0x00ef0000,
- 0x00a00000, 0x00e00000, 0x003b0000, 0x004d0000,
- 0x00ae0000, 0x002a0000, 0x00f50000, 0x00b00000,
- 0x00c80000, 0x00eb0000, 0x00bb0000, 0x003c0000,
- 0x00830000, 0x00530000, 0x00990000, 0x00610000,
- 0x00170000, 0x002b0000, 0x00040000, 0x007e0000,
- 0x00ba0000, 0x00770000, 0x00d60000, 0x00260000,
- 0x00e10000, 0x00690000, 0x00140000, 0x00630000,
- 0x00550000, 0x00210000, 0x000c0000, 0x007d0000
-}, {
- 0x52000000, 0x09000000, 0x6a000000, 0xd5000000,
- 0x30000000, 0x36000000, 0xa5000000, 0x38000000,
- 0xbf000000, 0x40000000, 0xa3000000, 0x9e000000,
- 0x81000000, 0xf3000000, 0xd7000000, 0xfb000000,
- 0x7c000000, 0xe3000000, 0x39000000, 0x82000000,
- 0x9b000000, 0x2f000000, 0xff000000, 0x87000000,
- 0x34000000, 0x8e000000, 0x43000000, 0x44000000,
- 0xc4000000, 0xde000000, 0xe9000000, 0xcb000000,
- 0x54000000, 0x7b000000, 0x94000000, 0x32000000,
- 0xa6000000, 0xc2000000, 0x23000000, 0x3d000000,
- 0xee000000, 0x4c000000, 0x95000000, 0x0b000000,
- 0x42000000, 0xfa000000, 0xc3000000, 0x4e000000,
- 0x08000000, 0x2e000000, 0xa1000000, 0x66000000,
- 0x28000000, 0xd9000000, 0x24000000, 0xb2000000,
- 0x76000000, 0x5b000000, 0xa2000000, 0x49000000,
- 0x6d000000, 0x8b000000, 0xd1000000, 0x25000000,
- 0x72000000, 0xf8000000, 0xf6000000, 0x64000000,
- 0x86000000, 0x68000000, 0x98000000, 0x16000000,
- 0xd4000000, 0xa4000000, 0x5c000000, 0xcc000000,
- 0x5d000000, 0x65000000, 0xb6000000, 0x92000000,
- 0x6c000000, 0x70000000, 0x48000000, 0x50000000,
- 0xfd000000, 0xed000000, 0xb9000000, 0xda000000,
- 0x5e000000, 0x15000000, 0x46000000, 0x57000000,
- 0xa7000000, 0x8d000000, 0x9d000000, 0x84000000,
- 0x90000000, 0xd8000000, 0xab000000, 0x00000000,
- 0x8c000000, 0xbc000000, 0xd3000000, 0x0a000000,
- 0xf7000000, 0xe4000000, 0x58000000, 0x05000000,
- 0xb8000000, 0xb3000000, 0x45000000, 0x06000000,
- 0xd0000000, 0x2c000000, 0x1e000000, 0x8f000000,
- 0xca000000, 0x3f000000, 0x0f000000, 0x02000000,
- 0xc1000000, 0xaf000000, 0xbd000000, 0x03000000,
- 0x01000000, 0x13000000, 0x8a000000, 0x6b000000,
- 0x3a000000, 0x91000000, 0x11000000, 0x41000000,
- 0x4f000000, 0x67000000, 0xdc000000, 0xea000000,
- 0x97000000, 0xf2000000, 0xcf000000, 0xce000000,
- 0xf0000000, 0xb4000000, 0xe6000000, 0x73000000,
- 0x96000000, 0xac000000, 0x74000000, 0x22000000,
- 0xe7000000, 0xad000000, 0x35000000, 0x85000000,
- 0xe2000000, 0xf9000000, 0x37000000, 0xe8000000,
- 0x1c000000, 0x75000000, 0xdf000000, 0x6e000000,
- 0x47000000, 0xf1000000, 0x1a000000, 0x71000000,
- 0x1d000000, 0x29000000, 0xc5000000, 0x89000000,
- 0x6f000000, 0xb7000000, 0x62000000, 0x0e000000,
- 0xaa000000, 0x18000000, 0xbe000000, 0x1b000000,
- 0xfc000000, 0x56000000, 0x3e000000, 0x4b000000,
- 0xc6000000, 0xd2000000, 0x79000000, 0x20000000,
- 0x9a000000, 0xdb000000, 0xc0000000, 0xfe000000,
- 0x78000000, 0xcd000000, 0x5a000000, 0xf4000000,
- 0x1f000000, 0xdd000000, 0xa8000000, 0x33000000,
- 0x88000000, 0x07000000, 0xc7000000, 0x31000000,
- 0xb1000000, 0x12000000, 0x10000000, 0x59000000,
- 0x27000000, 0x80000000, 0xec000000, 0x5f000000,
- 0x60000000, 0x51000000, 0x7f000000, 0xa9000000,
- 0x19000000, 0xb5000000, 0x4a000000, 0x0d000000,
- 0x2d000000, 0xe5000000, 0x7a000000, 0x9f000000,
- 0x93000000, 0xc9000000, 0x9c000000, 0xef000000,
- 0xa0000000, 0xe0000000, 0x3b000000, 0x4d000000,
- 0xae000000, 0x2a000000, 0xf5000000, 0xb0000000,
- 0xc8000000, 0xeb000000, 0xbb000000, 0x3c000000,
- 0x83000000, 0x53000000, 0x99000000, 0x61000000,
- 0x17000000, 0x2b000000, 0x04000000, 0x7e000000,
- 0xba000000, 0x77000000, 0xd6000000, 0x26000000,
- 0xe1000000, 0x69000000, 0x14000000, 0x63000000,
- 0x55000000, 0x21000000, 0x0c000000, 0x7d000000
-}
-};
-
-static const u4byte rco_tab[10] = {
- 0x00000001, 0x00000002, 0x00000004, 0x00000008, 0x00000010,
- 0x00000020, 0x00000040, 0x00000080, 0x0000001b, 0x00000036
-};
-
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sha1.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sha1.c b/contrib/pgcrypto/sha1.c
deleted file mode 100644
index 45339a1..0000000
--- a/contrib/pgcrypto/sha1.c
+++ /dev/null
@@ -1,342 +0,0 @@
-/* $KAME: sha1.c,v 1.3 2000/02/22 14:01:18 itojun Exp $ */
-
-/*
- * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/sha1.c,v 1.17 2007/04/06 05:36:50 tgl Exp $
- */
-/*
- * FIPS pub 180-1: Secure Hash Algorithm (SHA-1)
- * based on: http://csrc.nist.gov/fips/fip180-1.txt
- * implemented by Jun-ichiro itojun Itoh <it...@itojun.org>
- */
-
-#include "postgres.h"
-
-#include <sys/param.h>
-
-#include "px.h"
-#include "sha1.h"
-
-/* constant table */
-static uint32 _K[] = {0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6};
-
-#define K(t) _K[(t) / 20]
-
-#define F0(b, c, d) (((b) & (c)) | ((~(b)) & (d)))
-#define F1(b, c, d) (((b) ^ (c)) ^ (d))
-#define F2(b, c, d) (((b) & (c)) | ((b) & (d)) | ((c) & (d)))
-#define F3(b, c, d) (((b) ^ (c)) ^ (d))
-
-#define S(n, x) (((x) << (n)) | ((x) >> (32 - (n))))
-
-#define H(n) (ctxt->h.b32[(n)])
-#define COUNT (ctxt->count)
-#define BCOUNT (ctxt->c.b64[0] / 8)
-#define W(n) (ctxt->m.b32[(n)])
-
-#define PUTBYTE(x) \
-do { \
- ctxt->m.b8[(COUNT % 64)] = (x); \
- COUNT++; \
- COUNT %= 64; \
- ctxt->c.b64[0] += 8; \
- if (COUNT % 64 == 0) \
- sha1_step(ctxt); \
-} while (0)
-
-#define PUTPAD(x) \
-do { \
- ctxt->m.b8[(COUNT % 64)] = (x); \
- COUNT++; \
- COUNT %= 64; \
- if (COUNT % 64 == 0) \
- sha1_step(ctxt); \
-} while (0)
-
-static void sha1_step(struct sha1_ctxt *);
-
-static void
-sha1_step(struct sha1_ctxt * ctxt)
-{
- uint32 a,
- b,
- c,
- d,
- e;
- size_t t,
- s;
- uint32 tmp;
-
-#ifndef WORDS_BIGENDIAN
- struct sha1_ctxt tctxt;
-
- memmove(&tctxt.m.b8[0], &ctxt->m.b8[0], 64);
- ctxt->m.b8[0] = tctxt.m.b8[3];
- ctxt->m.b8[1] = tctxt.m.b8[2];
- ctxt->m.b8[2] = tctxt.m.b8[1];
- ctxt->m.b8[3] = tctxt.m.b8[0];
- ctxt->m.b8[4] = tctxt.m.b8[7];
- ctxt->m.b8[5] = tctxt.m.b8[6];
- ctxt->m.b8[6] = tctxt.m.b8[5];
- ctxt->m.b8[7] = tctxt.m.b8[4];
- ctxt->m.b8[8] = tctxt.m.b8[11];
- ctxt->m.b8[9] = tctxt.m.b8[10];
- ctxt->m.b8[10] = tctxt.m.b8[9];
- ctxt->m.b8[11] = tctxt.m.b8[8];
- ctxt->m.b8[12] = tctxt.m.b8[15];
- ctxt->m.b8[13] = tctxt.m.b8[14];
- ctxt->m.b8[14] = tctxt.m.b8[13];
- ctxt->m.b8[15] = tctxt.m.b8[12];
- ctxt->m.b8[16] = tctxt.m.b8[19];
- ctxt->m.b8[17] = tctxt.m.b8[18];
- ctxt->m.b8[18] = tctxt.m.b8[17];
- ctxt->m.b8[19] = tctxt.m.b8[16];
- ctxt->m.b8[20] = tctxt.m.b8[23];
- ctxt->m.b8[21] = tctxt.m.b8[22];
- ctxt->m.b8[22] = tctxt.m.b8[21];
- ctxt->m.b8[23] = tctxt.m.b8[20];
- ctxt->m.b8[24] = tctxt.m.b8[27];
- ctxt->m.b8[25] = tctxt.m.b8[26];
- ctxt->m.b8[26] = tctxt.m.b8[25];
- ctxt->m.b8[27] = tctxt.m.b8[24];
- ctxt->m.b8[28] = tctxt.m.b8[31];
- ctxt->m.b8[29] = tctxt.m.b8[30];
- ctxt->m.b8[30] = tctxt.m.b8[29];
- ctxt->m.b8[31] = tctxt.m.b8[28];
- ctxt->m.b8[32] = tctxt.m.b8[35];
- ctxt->m.b8[33] = tctxt.m.b8[34];
- ctxt->m.b8[34] = tctxt.m.b8[33];
- ctxt->m.b8[35] = tctxt.m.b8[32];
- ctxt->m.b8[36] = tctxt.m.b8[39];
- ctxt->m.b8[37] = tctxt.m.b8[38];
- ctxt->m.b8[38] = tctxt.m.b8[37];
- ctxt->m.b8[39] = tctxt.m.b8[36];
- ctxt->m.b8[40] = tctxt.m.b8[43];
- ctxt->m.b8[41] = tctxt.m.b8[42];
- ctxt->m.b8[42] = tctxt.m.b8[41];
- ctxt->m.b8[43] = tctxt.m.b8[40];
- ctxt->m.b8[44] = tctxt.m.b8[47];
- ctxt->m.b8[45] = tctxt.m.b8[46];
- ctxt->m.b8[46] = tctxt.m.b8[45];
- ctxt->m.b8[47] = tctxt.m.b8[44];
- ctxt->m.b8[48] = tctxt.m.b8[51];
- ctxt->m.b8[49] = tctxt.m.b8[50];
- ctxt->m.b8[50] = tctxt.m.b8[49];
- ctxt->m.b8[51] = tctxt.m.b8[48];
- ctxt->m.b8[52] = tctxt.m.b8[55];
- ctxt->m.b8[53] = tctxt.m.b8[54];
- ctxt->m.b8[54] = tctxt.m.b8[53];
- ctxt->m.b8[55] = tctxt.m.b8[52];
- ctxt->m.b8[56] = tctxt.m.b8[59];
- ctxt->m.b8[57] = tctxt.m.b8[58];
- ctxt->m.b8[58] = tctxt.m.b8[57];
- ctxt->m.b8[59] = tctxt.m.b8[56];
- ctxt->m.b8[60] = tctxt.m.b8[63];
- ctxt->m.b8[61] = tctxt.m.b8[62];
- ctxt->m.b8[62] = tctxt.m.b8[61];
- ctxt->m.b8[63] = tctxt.m.b8[60];
-#endif
-
- a = H(0);
- b = H(1);
- c = H(2);
- d = H(3);
- e = H(4);
-
- for (t = 0; t < 20; t++)
- {
- s = t & 0x0f;
- if (t >= 16)
- W(s) = S(1, W((s + 13) & 0x0f) ^ W((s + 8) & 0x0f) ^ W((s + 2) & 0x0f) ^ W(s));
- tmp = S(5, a) + F0(b, c, d) + e + W(s) + K(t);
- e = d;
- d = c;
- c = S(30, b);
- b = a;
- a = tmp;
- }
- for (t = 20; t < 40; t++)
- {
- s = t & 0x0f;
- W(s) = S(1, W((s + 13) & 0x0f) ^ W((s + 8) & 0x0f) ^ W((s + 2) & 0x0f) ^ W(s));
- tmp = S(5, a) + F1(b, c, d) + e + W(s) + K(t);
- e = d;
- d = c;
- c = S(30, b);
- b = a;
- a = tmp;
- }
- for (t = 40; t < 60; t++)
- {
- s = t & 0x0f;
- W(s) = S(1, W((s + 13) & 0x0f) ^ W((s + 8) & 0x0f) ^ W((s + 2) & 0x0f) ^ W(s));
- tmp = S(5, a) + F2(b, c, d) + e + W(s) + K(t);
- e = d;
- d = c;
- c = S(30, b);
- b = a;
- a = tmp;
- }
- for (t = 60; t < 80; t++)
- {
- s = t & 0x0f;
- W(s) = S(1, W((s + 13) & 0x0f) ^ W((s + 8) & 0x0f) ^ W((s + 2) & 0x0f) ^ W(s));
- tmp = S(5, a) + F3(b, c, d) + e + W(s) + K(t);
- e = d;
- d = c;
- c = S(30, b);
- b = a;
- a = tmp;
- }
-
- H(0) = H(0) + a;
- H(1) = H(1) + b;
- H(2) = H(2) + c;
- H(3) = H(3) + d;
- H(4) = H(4) + e;
-
- memset(&ctxt->m.b8[0], 0, 64);
-}
-
-/*------------------------------------------------------------*/
-
-void
-sha1_init(struct sha1_ctxt * ctxt)
-{
- memset(ctxt, 0, sizeof(struct sha1_ctxt));
- H(0) = 0x67452301;
- H(1) = 0xefcdab89;
- H(2) = 0x98badcfe;
- H(3) = 0x10325476;
- H(4) = 0xc3d2e1f0;
-}
-
-void
-sha1_pad(struct sha1_ctxt * ctxt)
-{
- size_t padlen; /* pad length in bytes */
- size_t padstart;
-
- PUTPAD(0x80);
-
- padstart = COUNT % 64;
- padlen = 64 - padstart;
- if (padlen < 8)
- {
- memset(&ctxt->m.b8[padstart], 0, padlen);
- COUNT += padlen;
- COUNT %= 64;
- sha1_step(ctxt);
- padstart = COUNT % 64; /* should be 0 */
- padlen = 64 - padstart; /* should be 64 */
- }
- memset(&ctxt->m.b8[padstart], 0, padlen - 8);
- COUNT += (padlen - 8);
- COUNT %= 64;
-#ifdef WORDS_BIGENDIAN
- PUTPAD(ctxt->c.b8[0]);
- PUTPAD(ctxt->c.b8[1]);
- PUTPAD(ctxt->c.b8[2]);
- PUTPAD(ctxt->c.b8[3]);
- PUTPAD(ctxt->c.b8[4]);
- PUTPAD(ctxt->c.b8[5]);
- PUTPAD(ctxt->c.b8[6]);
- PUTPAD(ctxt->c.b8[7]);
-#else
- PUTPAD(ctxt->c.b8[7]);
- PUTPAD(ctxt->c.b8[6]);
- PUTPAD(ctxt->c.b8[5]);
- PUTPAD(ctxt->c.b8[4]);
- PUTPAD(ctxt->c.b8[3]);
- PUTPAD(ctxt->c.b8[2]);
- PUTPAD(ctxt->c.b8[1]);
- PUTPAD(ctxt->c.b8[0]);
-#endif
-}
-
-void
-sha1_loop(struct sha1_ctxt * ctxt, const uint8 *input0, size_t len)
-{
- const uint8 *input;
- size_t gaplen;
- size_t gapstart;
- size_t off;
- size_t copysiz;
-
- input = (const uint8 *) input0;
- off = 0;
-
- while (off < len)
- {
- gapstart = COUNT % 64;
- gaplen = 64 - gapstart;
-
- copysiz = (gaplen < len - off) ? gaplen : len - off;
- memmove(&ctxt->m.b8[gapstart], &input[off], copysiz);
- COUNT += copysiz;
- COUNT %= 64;
- ctxt->c.b64[0] += copysiz * 8;
- if (COUNT % 64 == 0)
- sha1_step(ctxt);
- off += copysiz;
- }
-}
-
-void
-sha1_result(struct sha1_ctxt * ctxt, uint8 *digest0)
-{
- uint8 *digest;
-
- digest = (uint8 *) digest0;
- sha1_pad(ctxt);
-#ifdef WORDS_BIGENDIAN
- memmove(digest, &ctxt->h.b8[0], 20);
-#else
- digest[0] = ctxt->h.b8[3];
- digest[1] = ctxt->h.b8[2];
- digest[2] = ctxt->h.b8[1];
- digest[3] = ctxt->h.b8[0];
- digest[4] = ctxt->h.b8[7];
- digest[5] = ctxt->h.b8[6];
- digest[6] = ctxt->h.b8[5];
- digest[7] = ctxt->h.b8[4];
- digest[8] = ctxt->h.b8[11];
- digest[9] = ctxt->h.b8[10];
- digest[10] = ctxt->h.b8[9];
- digest[11] = ctxt->h.b8[8];
- digest[12] = ctxt->h.b8[15];
- digest[13] = ctxt->h.b8[14];
- digest[14] = ctxt->h.b8[13];
- digest[15] = ctxt->h.b8[12];
- digest[16] = ctxt->h.b8[19];
- digest[17] = ctxt->h.b8[18];
- digest[18] = ctxt->h.b8[17];
- digest[19] = ctxt->h.b8[16];
-#endif
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/sha1.h
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/sha1.h b/contrib/pgcrypto/sha1.h
deleted file mode 100644
index ae830fc..0000000
--- a/contrib/pgcrypto/sha1.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/pgcrypto/sha1.h,v 1.9 2003/11/29 22:39:28 pgsql Exp $ */
-/* $KAME: sha1.h,v 1.4 2000/02/22 14:01:18 itojun Exp $ */
-
-/*
- * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-/*
- * FIPS pub 180-1: Secure Hash Algorithm (SHA-1)
- * based on: http://csrc.nist.gov/fips/fip180-1.txt
- * implemented by Jun-ichiro itojun Itoh <it...@itojun.org>
- */
-
-#ifndef _NETINET6_SHA1_H_
-#define _NETINET6_SHA1_H_
-
-struct sha1_ctxt
-{
- union
- {
- uint8 b8[20];
- uint32 b32[5];
- } h;
- union
- {
- uint8 b8[8];
- uint64 b64[1];
- } c;
- union
- {
- uint8 b8[64];
- uint32 b32[16];
- } m;
- uint8 count;
-};
-
-extern void sha1_init(struct sha1_ctxt *);
-extern void sha1_pad(struct sha1_ctxt *);
-extern void sha1_loop(struct sha1_ctxt *, const uint8 *, size_t);
-extern void sha1_result(struct sha1_ctxt *, uint8 *);
-
-/* compatibilty with other SHA1 source codes */
-typedef struct sha1_ctxt SHA1_CTX;
-
-#define SHA1Init(x) sha1_init((x))
-#define SHA1Update(x, y, z) sha1_loop((x), (y), (z))
-#define SHA1Final(x, y) sha1_result((y), (x))
-
-#define SHA1_RESULTLEN (160/8)
-
-#endif /* _NETINET6_SHA1_H_ */
[04/11] incubator-hawq git commit: HAWQ-394. Remove pgcrypto from
code base
Posted by hu...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/px.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/px.c b/contrib/pgcrypto/px.c
deleted file mode 100644
index 4ba7391..0000000
--- a/contrib/pgcrypto/px.c
+++ /dev/null
@@ -1,443 +0,0 @@
-/*
- * px.c
- * Various cryptographic stuff for PostgreSQL.
- *
- * Copyright (c) 2001 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/px.c,v 1.18 2009/06/11 14:48:52 momjian Exp $
- */
-
-#include "postgres.h"
-
-#include "px.h"
-
-#include "postmaster/postmaster.h"
-
-struct error_desc
-{
- int err;
- const char *desc;
-};
-
-static const struct error_desc px_err_list[] = {
- {PXE_OK, "Everything ok"},
- {PXE_ERR_GENERIC, "Some PX error (not specified)"},
- {PXE_NO_HASH, "No such hash algorithm"},
- {PXE_NO_CIPHER, "No such cipher algorithm"},
- {PXE_NOTBLOCKSIZE, "Data not a multiple of block size"},
- {PXE_BAD_OPTION, "Unknown option"},
- {PXE_BAD_FORMAT, "Badly formatted type"},
- {PXE_KEY_TOO_BIG, "Key was too big"},
- {PXE_CIPHER_INIT, "Cipher cannot be initalized ?"},
- {PXE_HASH_UNUSABLE_FOR_HMAC, "This hash algorithm is unusable for HMAC"},
- {PXE_DEV_READ_ERROR, "Error reading from random device"},
- {PXE_OSSL_RAND_ERROR, "OpenSSL PRNG error"},
- {PXE_BUG, "pgcrypto bug"},
- {PXE_ARGUMENT_ERROR, "Illegal argument to function"},
- {PXE_UNKNOWN_SALT_ALGO, "Unknown salt algorithm"},
- {PXE_BAD_SALT_ROUNDS, "Incorrect number of rounds"},
- {PXE_MCRYPT_INTERNAL, "mcrypt internal error"},
- {PXE_NO_RANDOM, "No strong random source"},
- {PXE_DECRYPT_FAILED, "Decryption failed"},
- {PXE_PGP_CORRUPT_DATA, "Wrong key or corrupt data"},
- {PXE_PGP_CORRUPT_ARMOR, "Corrupt ascii-armor"},
- {PXE_PGP_UNSUPPORTED_COMPR, "Unsupported compression algorithm"},
- {PXE_PGP_UNSUPPORTED_CIPHER, "Unsupported cipher algorithm"},
- {PXE_PGP_UNSUPPORTED_HASH, "Unsupported digest algorithm"},
- {PXE_PGP_COMPRESSION_ERROR, "Compression error"},
- {PXE_PGP_NOT_TEXT, "Not text data"},
- {PXE_PGP_UNEXPECTED_PKT, "Unexpected packet in key data"},
- {PXE_PGP_NO_BIGNUM,
- "public-key functions disabled - "
- "pgcrypto needs OpenSSL for bignums"},
- {PXE_PGP_MATH_FAILED, "Math operation failed"},
- {PXE_PGP_SHORT_ELGAMAL_KEY, "Elgamal keys must be at least 1024 bits long"},
- {PXE_PGP_RSA_UNSUPPORTED, "pgcrypto does not support RSA keys"},
- {PXE_PGP_UNKNOWN_PUBALGO, "Unknown public-key encryption algorithm"},
- {PXE_PGP_WRONG_KEY, "Wrong key"},
- {PXE_PGP_MULTIPLE_KEYS,
- "Several keys given - pgcrypto does not handle keyring"},
- {PXE_PGP_EXPECT_PUBLIC_KEY, "Refusing to encrypt with secret key"},
- {PXE_PGP_EXPECT_SECRET_KEY, "Cannot decrypt with public key"},
- {PXE_PGP_NOT_V4_KEYPKT, "Only V4 key packets are supported"},
- {PXE_PGP_KEYPKT_CORRUPT, "Corrupt key packet"},
- {PXE_PGP_NO_USABLE_KEY, "No encryption key found"},
- {PXE_PGP_NEED_SECRET_PSW, "Need password for secret key"},
- {PXE_PGP_BAD_S2K_MODE, "Bad S2K mode"},
- {PXE_PGP_UNSUPPORTED_PUBALGO, "Unsupported public key algorithm"},
- {PXE_PGP_MULTIPLE_SUBKEYS, "Several subkeys not supported"},
-
- /* fake this as PXE_PGP_CORRUPT_DATA */
- {PXE_MBUF_SHORT_READ, "Corrupt data"},
-
- {0, NULL},
-};
-
-const char *
-px_strerror(int err)
-{
- const struct error_desc *e;
-
- for (e = px_err_list; e->desc; e++)
- if (e->err == err)
- return e->desc;
- return "Bad error code";
-}
-
-
-const char *
-px_resolve_alias(const PX_Alias *list, const char *name)
-{
- while (list->name)
- {
- if (pg_strcasecmp(list->alias, name) == 0)
- return list->name;
- list++;
- }
- return name;
-}
-
-static void (*debug_handler) (const char *) = NULL;
-
-void
-px_set_debug_handler(void (*handler) (const char *))
-{
- debug_handler = handler;
-}
-
-void
-px_debug(const char *fmt,...)
-{
- va_list ap;
-
- va_start(ap, fmt);
- if (debug_handler)
- {
- char buf[512];
-
- vsnprintf(buf, sizeof(buf), fmt, ap);
- debug_handler(buf);
- }
- va_end(ap);
-}
-
-/*
- * combo - cipher + padding (+ checksum)
- */
-
-static unsigned
-combo_encrypt_len(PX_Combo *cx, unsigned dlen)
-{
- return dlen + 512;
-}
-
-static unsigned
-combo_decrypt_len(PX_Combo *cx, unsigned dlen)
-{
- return dlen;
-}
-
-static int
-combo_init(PX_Combo *cx, const uint8 *key, unsigned klen,
- const uint8 *iv, unsigned ivlen)
-{
- int err;
- unsigned bs,
- ks,
- ivs;
- PX_Cipher *c = cx->cipher;
- uint8 *ivbuf = NULL;
- uint8 *keybuf;
-
- bs = px_cipher_block_size(c);
- ks = px_cipher_key_size(c);
-
- ivs = px_cipher_iv_size(c);
- if (ivs > 0)
- {
- ivbuf = px_alloc(ivs);
- memset(ivbuf, 0, ivs);
- if (ivlen > ivs)
- memcpy(ivbuf, iv, ivs);
- else
- memcpy(ivbuf, iv, ivlen);
- }
-
- if (klen > ks)
- klen = ks;
- keybuf = px_alloc(ks);
- memset(keybuf, 0, ks);
- memcpy(keybuf, key, klen);
-
- err = px_cipher_init(c, keybuf, klen, ivbuf);
-
- if (ivbuf)
- px_free(ivbuf);
- px_free(keybuf);
-
- return err;
-}
-
-static int
-combo_encrypt(PX_Combo *cx, const uint8 *data, unsigned dlen,
- uint8 *res, unsigned *rlen)
-{
- int err = 0;
- uint8 *bbuf;
- unsigned bs,
- maxlen,
- bpos,
- i,
- pad;
-
- PX_Cipher *c = cx->cipher;
-
- bbuf = NULL;
- maxlen = *rlen;
- bs = px_cipher_block_size(c);
-
- /* encrypt */
- if (bs > 1)
- {
- bbuf = px_alloc(bs * 4);
- bpos = dlen % bs;
- *rlen = dlen - bpos;
- memcpy(bbuf, data + *rlen, bpos);
-
- /* encrypt full-block data */
- if (*rlen)
- {
- err = px_cipher_encrypt(c, data, *rlen, res);
- if (err)
- goto out;
- }
-
- /* bbuf has now bpos bytes of stuff */
- if (cx->padding)
- {
- pad = bs - (bpos % bs);
- for (i = 0; i < pad; i++)
- bbuf[bpos++] = pad;
- }
- else if (bpos % bs)
- {
- /* ERROR? */
- pad = bs - (bpos % bs);
- for (i = 0; i < pad; i++)
- bbuf[bpos++] = 0;
- }
-
- /* encrypt the rest - pad */
- if (bpos)
- {
- err = px_cipher_encrypt(c, bbuf, bpos, res + *rlen);
- *rlen += bpos;
- }
- }
- else
- {
- /* stream cipher/mode - no pad needed */
- err = px_cipher_encrypt(c, data, dlen, res);
- if (err)
- goto out;
- *rlen = dlen;
- }
-out:
- if (bbuf)
- px_free(bbuf);
-
- return err;
-}
-
-static int
-combo_decrypt(PX_Combo *cx, const uint8 *data, unsigned dlen,
- uint8 *res, unsigned *rlen)
-{
- unsigned bs,
- i,
- pad;
- unsigned pad_ok;
-
- PX_Cipher *c = cx->cipher;
-
- /* decide whether zero-length input is allowed */
- if (dlen == 0)
- {
- /* with padding, empty ciphertext is not allowed */
- if (cx->padding)
- return PXE_DECRYPT_FAILED;
-
- /* without padding, report empty result */
- *rlen = 0;
- return 0;
- }
-
- bs = px_cipher_block_size(c);
- if (bs > 1 && (dlen % bs) != 0)
- goto block_error;
-
- /* decrypt */
- *rlen = dlen;
- px_cipher_decrypt(c, data, dlen, res);
-
- /* unpad */
- if (bs > 1 && cx->padding)
- {
- pad = res[*rlen - 1];
- pad_ok = 0;
- if (pad > 0 && pad <= bs && pad <= *rlen)
- {
- pad_ok = 1;
- for (i = *rlen - pad; i < *rlen; i++)
- if (res[i] != pad)
- {
- pad_ok = 0;
- break;
- }
- }
-
- if (pad_ok)
- *rlen -= pad;
- }
-
- return 0;
-
-block_error:
- return PXE_NOTBLOCKSIZE;
-}
-
-static void
-combo_free(PX_Combo *cx)
-{
- if (cx->cipher)
- px_cipher_free(cx->cipher);
- memset(cx, 0, sizeof(*cx));
- px_free(cx);
-}
-
-/* PARSER */
-
-static int
-parse_cipher_name(char *full, char **cipher, char **pad)
-{
- char *p,
- *p2,
- *q;
-
- *cipher = full;
- *pad = NULL;
-
- p = strchr(full, '/');
- if (p != NULL)
- *p++ = 0;
- while (p != NULL)
- {
- if ((q = strchr(p, '/')) != NULL)
- *q++ = 0;
-
- if (!*p)
- {
- p = q;
- continue;
- }
- p2 = strchr(p, ':');
- if (p2 != NULL)
- {
- *p2++ = 0;
- if (!strcmp(p, "pad"))
- *pad = p2;
- else
- return PXE_BAD_OPTION;
- }
- else
- return PXE_BAD_FORMAT;
-
- p = q;
- }
- return 0;
-}
-
-/* provider */
-
-int
-px_find_combo(const char *name, PX_Combo **res)
-{
- int err;
- char *buf,
- *s_cipher,
- *s_pad;
-
- PX_Combo *cx;
-
- cx = px_alloc(sizeof(*cx));
- memset(cx, 0, sizeof(*cx));
-
- buf = px_alloc(strlen(name) + 1);
- strcpy(buf, name);
-
- err = parse_cipher_name(buf, &s_cipher, &s_pad);
- if (err)
- {
- px_free(buf);
- px_free(cx);
- return err;
- }
-
- err = px_find_cipher(s_cipher, &cx->cipher);
- if (err)
- goto err1;
-
- if (s_pad != NULL)
- {
- if (!strcmp(s_pad, "pkcs"))
- cx->padding = 1;
- else if (!strcmp(s_pad, "none"))
- cx->padding = 0;
- else
- goto err1;
- }
- else
- cx->padding = 1;
-
- cx->init = combo_init;
- cx->encrypt = combo_encrypt;
- cx->decrypt = combo_decrypt;
- cx->encrypt_len = combo_encrypt_len;
- cx->decrypt_len = combo_decrypt_len;
- cx->free = combo_free;
-
- px_free(buf);
-
- *res = cx;
-
- return 0;
-
-err1:
- if (cx->cipher)
- px_cipher_free(cx->cipher);
- px_free(cx);
- px_free(buf);
- return PXE_NO_CIPHER;
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/px.h
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/px.h b/contrib/pgcrypto/px.h
deleted file mode 100644
index c916e93..0000000
--- a/contrib/pgcrypto/px.h
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * px.h
- * Header file for pgcrypto.
- *
- * Copyright (c) 2001 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/px.h,v 1.19 2009/06/11 14:48:52 momjian Exp $
- */
-
-#ifndef __PX_H
-#define __PX_H
-
-#include <sys/types.h>
-#include <sys/param.h>
-
-/* keep debug messages? */
-#define PX_DEBUG
-
-/* a way to disable palloc
- * - useful if compiled into standalone
- */
-#ifndef PX_OWN_ALLOC
-#define px_alloc(s) palloc(s)
-#define px_realloc(p, s) repalloc(p, s)
-#define px_free(p) pfree(p)
-#else
-void *px_alloc(size_t s);
-void *px_realloc(void *p, size_t s);
-void px_free(void *p);
-#endif
-
-/* max len of 'type' parms */
-#define PX_MAX_NAMELEN 128
-
-/* max salt returned */
-#define PX_MAX_SALT_LEN 128
-
-/*
- * PX error codes
- */
-#define PXE_OK 0
-#define PXE_ERR_GENERIC -1
-#define PXE_NO_HASH -2
-#define PXE_NO_CIPHER -3
-#define PXE_NOTBLOCKSIZE -4
-#define PXE_BAD_OPTION -5
-#define PXE_BAD_FORMAT -6
-#define PXE_KEY_TOO_BIG -7
-#define PXE_CIPHER_INIT -8
-#define PXE_HASH_UNUSABLE_FOR_HMAC -9
-#define PXE_DEV_READ_ERROR -10
-#define PXE_OSSL_RAND_ERROR -11
-#define PXE_BUG -12
-#define PXE_ARGUMENT_ERROR -13
-#define PXE_UNKNOWN_SALT_ALGO -14
-#define PXE_BAD_SALT_ROUNDS -15
-#define PXE_MCRYPT_INTERNAL -16
-#define PXE_NO_RANDOM -17
-#define PXE_DECRYPT_FAILED -18
-
-#define PXE_MBUF_SHORT_READ -50
-
-#define PXE_PGP_CORRUPT_DATA -100
-#define PXE_PGP_CORRUPT_ARMOR -101
-#define PXE_PGP_UNSUPPORTED_COMPR -102
-#define PXE_PGP_UNSUPPORTED_CIPHER -103
-#define PXE_PGP_UNSUPPORTED_HASH -104
-#define PXE_PGP_COMPRESSION_ERROR -105
-#define PXE_PGP_NOT_TEXT -106
-#define PXE_PGP_UNEXPECTED_PKT -107
-#define PXE_PGP_NO_BIGNUM -108
-#define PXE_PGP_MATH_FAILED -109
-#define PXE_PGP_SHORT_ELGAMAL_KEY -110
-#define PXE_PGP_RSA_UNSUPPORTED -111
-#define PXE_PGP_UNKNOWN_PUBALGO -112
-#define PXE_PGP_WRONG_KEY -113
-#define PXE_PGP_MULTIPLE_KEYS -114
-#define PXE_PGP_EXPECT_PUBLIC_KEY -115
-#define PXE_PGP_EXPECT_SECRET_KEY -116
-#define PXE_PGP_NOT_V4_KEYPKT -117
-#define PXE_PGP_KEYPKT_CORRUPT -118
-#define PXE_PGP_NO_USABLE_KEY -119
-#define PXE_PGP_NEED_SECRET_PSW -120
-#define PXE_PGP_BAD_S2K_MODE -121
-#define PXE_PGP_UNSUPPORTED_PUBALGO -122
-#define PXE_PGP_MULTIPLE_SUBKEYS -123
-
-
-typedef struct px_digest PX_MD;
-typedef struct px_alias PX_Alias;
-typedef struct px_hmac PX_HMAC;
-typedef struct px_cipher PX_Cipher;
-typedef struct px_combo PX_Combo;
-
-struct px_digest
-{
- unsigned (*result_size) (PX_MD *h);
- unsigned (*block_size) (PX_MD *h);
- void (*reset) (PX_MD *h);
- void (*update) (PX_MD *h, const uint8 *data, unsigned dlen);
- void (*finish) (PX_MD *h, uint8 *dst);
- void (*free) (PX_MD *h);
- /* private */
- union
- {
- unsigned code;
- void *ptr;
- } p;
-};
-
-struct px_alias
-{
- char *alias;
- char *name;
-};
-
-struct px_hmac
-{
- unsigned (*result_size) (PX_HMAC *h);
- unsigned (*block_size) (PX_HMAC *h);
- void (*reset) (PX_HMAC *h);
- void (*update) (PX_HMAC *h, const uint8 *data, unsigned dlen);
- void (*finish) (PX_HMAC *h, uint8 *dst);
- void (*free) (PX_HMAC *h);
- void (*init) (PX_HMAC *h, const uint8 *key, unsigned klen);
-
- PX_MD *md;
- /* private */
- struct
- {
- uint8 *ipad;
- uint8 *opad;
- } p;
-};
-
-struct px_cipher
-{
- unsigned (*block_size) (PX_Cipher *c);
- unsigned (*key_size) (PX_Cipher *c); /* max key len */
- unsigned (*iv_size) (PX_Cipher *c);
-
- int (*init) (PX_Cipher *c, const uint8 *key, unsigned klen, const uint8 *iv);
- int (*encrypt) (PX_Cipher *c, const uint8 *data, unsigned dlen, uint8 *res);
- int (*decrypt) (PX_Cipher *c, const uint8 *data, unsigned dlen, uint8 *res);
- void (*free) (PX_Cipher *c);
- /* private */
- void *ptr;
- int pstat; /* mcrypt uses it */
-};
-
-struct px_combo
-{
- int (*init) (PX_Combo *cx, const uint8 *key, unsigned klen,
- const uint8 *iv, unsigned ivlen);
- int (*encrypt) (PX_Combo *cx, const uint8 *data, unsigned dlen,
- uint8 *res, unsigned *rlen);
- int (*decrypt) (PX_Combo *cx, const uint8 *data, unsigned dlen,
- uint8 *res, unsigned *rlen);
- unsigned (*encrypt_len) (PX_Combo *cx, unsigned dlen);
- unsigned (*decrypt_len) (PX_Combo *cx, unsigned dlen);
- void (*free) (PX_Combo *cx);
-
- PX_Cipher *cipher;
- unsigned padding;
-};
-
-int px_find_digest(const char *name, PX_MD **res);
-int px_find_hmac(const char *name, PX_HMAC **res);
-int px_find_cipher(const char *name, PX_Cipher **res);
-int px_find_combo(const char *name, PX_Combo **res);
-
-int px_get_random_bytes(uint8 *dst, unsigned count);
-int px_get_pseudo_random_bytes(uint8 *dst, unsigned count);
-int px_add_entropy(const uint8 *data, unsigned count);
-
-unsigned px_acquire_system_randomness(uint8 *dst);
-
-const char *px_strerror(int err);
-
-const char *px_resolve_alias(const PX_Alias *aliases, const char *name);
-
-void px_set_debug_handler(void (*handler) (const char *));
-
-#ifdef PX_DEBUG
-void px_debug(const char *fmt,...);
-#else
-#define px_debug(...)
-#endif
-
-#define px_md_result_size(md) (md)->result_size(md)
-#define px_md_block_size(md) (md)->block_size(md)
-#define px_md_reset(md) (md)->reset(md)
-#define px_md_update(md, data, dlen) (md)->update(md, data, dlen)
-#define px_md_finish(md, buf) (md)->finish(md, buf)
-#define px_md_free(md) (md)->free(md)
-
-#define px_hmac_result_size(hmac) (hmac)->result_size(hmac)
-#define px_hmac_block_size(hmac) (hmac)->block_size(hmac)
-#define px_hmac_reset(hmac) (hmac)->reset(hmac)
-#define px_hmac_init(hmac, key, klen) (hmac)->init(hmac, key, klen)
-#define px_hmac_update(hmac, data, dlen) (hmac)->update(hmac, data, dlen)
-#define px_hmac_finish(hmac, buf) (hmac)->finish(hmac, buf)
-#define px_hmac_free(hmac) (hmac)->free(hmac)
-
-
-#define px_cipher_key_size(c) (c)->key_size(c)
-#define px_cipher_block_size(c) (c)->block_size(c)
-#define px_cipher_iv_size(c) (c)->iv_size(c)
-#define px_cipher_init(c, k, klen, iv) (c)->init(c, k, klen, iv)
-#define px_cipher_encrypt(c, data, dlen, res) \
- (c)->encrypt(c, data, dlen, res)
-#define px_cipher_decrypt(c, data, dlen, res) \
- (c)->decrypt(c, data, dlen, res)
-#define px_cipher_free(c) (c)->free(c)
-
-
-#define px_combo_encrypt_len(c, dlen) (c)->encrypt_len(c, dlen)
-#define px_combo_decrypt_len(c, dlen) (c)->decrypt_len(c, dlen)
-#define px_combo_init(c, key, klen, iv, ivlen) \
- (c)->init(c, key, klen, iv, ivlen)
-#define px_combo_encrypt(c, data, dlen, res, rlen) \
- (c)->encrypt(c, data, dlen, res, rlen)
-#define px_combo_decrypt(c, data, dlen, res, rlen) \
- (c)->decrypt(c, data, dlen, res, rlen)
-#define px_combo_free(c) (c)->free(c)
-
-#endif /* __PX_H */
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/random.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/random.c b/contrib/pgcrypto/random.c
deleted file mode 100644
index b22e029..0000000
--- a/contrib/pgcrypto/random.c
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * random.c
- * Acquire randomness from system. For seeding RNG.
- *
- * Copyright (c) 2001 Marko Kreen
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $PostgreSQL: pgsql/contrib/pgcrypto/random.c,v 1.17 2006/06/08 03:29:30 momjian Exp $
- */
-
-#include "postgres.h"
-
-#include "px.h"
-
-/* how many bytes to ask from system random provider */
-#define RND_BYTES 32
-
-/*
- * Try to read from /dev/urandom or /dev/random on these OS'es.
- *
- * The list can be pretty liberal, as the device not existing
- * is expected event.
- */
-#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) \
- || defined(__NetBSD__) || defined(__DragonFly__) \
- || defined(__darwin__) || defined(__SOLARIS__) \
- || defined(__hpux) || defined(__HPUX__) \
- || defined(__CYGWIN__) || defined(_AIX)
-
-#define TRY_DEV_RANDOM
-
-#include <fcntl.h>
-#include <unistd.h>
-
-static int
-safe_read(int fd, void *buf, size_t count)
-{
- int done = 0;
- char *p = buf;
- int res;
-
- while (count)
- {
- res = read(fd, p, count);
- if (res <= 0)
- {
- if (errno == EINTR)
- continue;
- return PXE_DEV_READ_ERROR;
- }
- p += res;
- done += res;
- count -= res;
- }
- return done;
-}
-
-static uint8 *
-try_dev_random(uint8 *dst)
-{
- int fd;
- int res;
-
- fd = open("/dev/urandom", O_RDONLY, 0);
- if (fd == -1)
- {
- fd = open("/dev/random", O_RDONLY, 0);
- if (fd == -1)
- return dst;
- }
- res = safe_read(fd, dst, RND_BYTES);
- close(fd);
- if (res > 0)
- dst += res;
- return dst;
-}
-#endif
-
-/*
- * Try to find randomness on Windows
- */
-#ifdef WIN32
-
-#define TRY_WIN32_GENRAND
-#define TRY_WIN32_PERFC
-
-#include <windows.h>
-#include <wincrypt.h>
-
-/*
- * this function is from libtomcrypt
- *
- * try to use Microsoft crypto API
- */
-static uint8 *
-try_win32_genrand(uint8 *dst)
-{
- int res;
- HCRYPTPROV h = 0;
-
- res = CryptAcquireContext(&h, NULL, MS_DEF_PROV, PROV_RSA_FULL,
- (CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET));
- if (!res)
- res = CryptAcquireContext(&h, NULL, MS_DEF_PROV, PROV_RSA_FULL,
- CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET | CRYPT_NEWKEYSET);
- if (!res)
- return dst;
-
- res = CryptGenRandom(h, RND_BYTES, dst);
- if (res == TRUE)
- dst += RND_BYTES;
-
- CryptReleaseContext(h, 0);
- return dst;
-}
-
-static uint8 *
-try_win32_perfc(uint8 *dst)
-{
- int res;
- LARGE_INTEGER time;
-
- res = QueryPerformanceCounter(&time);
- if (!res)
- return dst;
-
- memcpy(dst, &time, sizeof(time));
- return dst + sizeof(time);
-}
-#endif /* WIN32 */
-
-
-/*
- * If we are not on Windows, then hopefully we are
- * on a unix-like system. Use the usual suspects
- * for randomness.
- */
-#ifndef WIN32
-
-#define TRY_UNIXSTD
-
-#include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
-#include <unistd.h>
-
-/*
- * Everything here is predictible, only needs some patience.
- *
- * But there is a chance that the system-specific functions
- * did not work. So keep faith and try to slow the attacker down.
- */
-static uint8 *
-try_unix_std(uint8 *dst)
-{
- pid_t pid;
- int x;
- PX_MD *md;
- struct timeval tv;
- int res;
-
- /* process id */
- pid = getpid();
- memcpy(dst, (uint8 *) &pid, sizeof(pid));
- dst += sizeof(pid);
-
- /* time */
- gettimeofday(&tv, NULL);
- memcpy(dst, (uint8 *) &tv, sizeof(tv));
- dst += sizeof(tv);
-
- /* pointless, but should not hurt */
- x = random();
- memcpy(dst, (uint8 *) &x, sizeof(x));
- dst += sizeof(x);
-
- /* let's be desperate */
- res = px_find_digest("sha1", &md);
- if (res >= 0)
- {
- uint8 *ptr;
- uint8 stack[8192];
- int alloc = 32 * 1024;
-
- px_md_update(md, stack, sizeof(stack));
- ptr = px_alloc(alloc);
- px_md_update(md, ptr, alloc);
- px_free(ptr);
-
- px_md_finish(md, dst);
- px_md_free(md);
-
- dst += 20;
- }
-
- return dst;
-}
-#endif
-
-/*
- * try to extract some randomness for initial seeding
- *
- * dst should have room for 1024 bytes.
- */
-unsigned
-px_acquire_system_randomness(uint8 *dst)
-{
- uint8 *p = dst;
-
-#ifdef TRY_DEV_RANDOM
- p = try_dev_random(p);
-#endif
-#ifdef TRY_WIN32_GENRAND
- p = try_win32_genrand(p);
-#endif
-#ifdef TRY_WIN32_PERFC
- p = try_win32_perfc(p);
-#endif
-#ifdef TRY_UNIXSTD
- p = try_unix_std(p);
-#endif
- return p - dst;
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/rijndael.c
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/rijndael.c b/contrib/pgcrypto/rijndael.c
deleted file mode 100644
index cf9eca9..0000000
--- a/contrib/pgcrypto/rijndael.c
+++ /dev/null
@@ -1,677 +0,0 @@
-/* $OpenBSD: rijndael.c,v 1.6 2000/12/09 18:51:34 markus Exp $ */
-
-/* $PostgreSQL: pgsql/contrib/pgcrypto/rijndael.c,v 1.14 2009/06/11 14:48:52 momjian Exp $ */
-
-/* This is an independent implementation of the encryption algorithm: */
-/* */
-/* RIJNDAEL by Joan Daemen and Vincent Rijmen */
-/* */
-/* which is a candidate algorithm in the Advanced Encryption Standard */
-/* programme of the US National Institute of Standards and Technology. */
-/* */
-/* Copyright in this implementation is held by Dr B R Gladman but I */
-/* hereby give permission for its free direct or derivative use subject */
-/* to acknowledgment of its origin and compliance with any conditions */
-/* that the originators of the algorithm place on its exploitation. */
-/* */
-/* Dr Brian Gladman (gladman@seven77.demon.co.uk) 14th January 1999 */
-
-/* Timing data for Rijndael (rijndael.c)
-
-Algorithm: rijndael (rijndael.c)
-
-128 bit key:
-Key Setup: 305/1389 cycles (encrypt/decrypt)
-Encrypt: 374 cycles = 68.4 mbits/sec
-Decrypt: 352 cycles = 72.7 mbits/sec
-Mean: 363 cycles = 70.5 mbits/sec
-
-192 bit key:
-Key Setup: 277/1595 cycles (encrypt/decrypt)
-Encrypt: 439 cycles = 58.3 mbits/sec
-Decrypt: 425 cycles = 60.2 mbits/sec
-Mean: 432 cycles = 59.3 mbits/sec
-
-256 bit key:
-Key Setup: 374/1960 cycles (encrypt/decrypt)
-Encrypt: 502 cycles = 51.0 mbits/sec
-Decrypt: 498 cycles = 51.4 mbits/sec
-Mean: 500 cycles = 51.2 mbits/sec
-
-*/
-
-#include "postgres.h"
-
-#include <sys/param.h>
-
-#include "px.h"
-#include "rijndael.h"
-
-#define PRE_CALC_TABLES
-#define LARGE_TABLES
-
-static void gen_tabs(void);
-
-/* 3. Basic macros for speeding up generic operations */
-
-/* Circular rotate of 32 bit values */
-
-#define rotr(x,n) (((x) >> ((int)(n))) | ((x) << (32 - (int)(n))))
-#define rotl(x,n) (((x) << ((int)(n))) | ((x) >> (32 - (int)(n))))
-
-/* Invert byte order in a 32 bit variable */
-
-#define bswap(x) ((rotl((x), 8) & 0x00ff00ff) | (rotr((x), 8) & 0xff00ff00))
-
-/* Extract byte from a 32 bit quantity (little endian notation) */
-
-#define byte(x,n) ((u1byte)((x) >> (8 * (n))))
-
-#ifdef WORDS_BIGENDIAN
-#define io_swap(x) bswap(x)
-#else
-#define io_swap(x) (x)
-#endif
-
-#ifdef PRINT_TABS
-#undef PRE_CALC_TABLES
-#endif
-
-#ifdef PRE_CALC_TABLES
-
-#include "rijndael.tbl"
-#define tab_gen 1
-#else /* !PRE_CALC_TABLES */
-
-static u1byte pow_tab[256];
-static u1byte log_tab[256];
-static u1byte sbx_tab[256];
-static u1byte isb_tab[256];
-static u4byte rco_tab[10];
-static u4byte ft_tab[4][256];
-static u4byte it_tab[4][256];
-
-#ifdef LARGE_TABLES
-static u4byte fl_tab[4][256];
-static u4byte il_tab[4][256];
-#endif
-
-static u4byte tab_gen = 0;
-#endif /* !PRE_CALC_TABLES */
-
-#define ff_mult(a,b) ((a) && (b) ? pow_tab[(log_tab[a] + log_tab[b]) % 255] : 0)
-
-#define f_rn(bo, bi, n, k) \
- (bo)[n] = ft_tab[0][byte((bi)[n],0)] ^ \
- ft_tab[1][byte((bi)[((n) + 1) & 3],1)] ^ \
- ft_tab[2][byte((bi)[((n) + 2) & 3],2)] ^ \
- ft_tab[3][byte((bi)[((n) + 3) & 3],3)] ^ *((k) + (n))
-
-#define i_rn(bo, bi, n, k) \
- (bo)[n] = it_tab[0][byte((bi)[n],0)] ^ \
- it_tab[1][byte((bi)[((n) + 3) & 3],1)] ^ \
- it_tab[2][byte((bi)[((n) + 2) & 3],2)] ^ \
- it_tab[3][byte((bi)[((n) + 1) & 3],3)] ^ *((k) + (n))
-
-#ifdef LARGE_TABLES
-
-#define ls_box(x) \
- ( fl_tab[0][byte(x, 0)] ^ \
- fl_tab[1][byte(x, 1)] ^ \
- fl_tab[2][byte(x, 2)] ^ \
- fl_tab[3][byte(x, 3)] )
-
-#define f_rl(bo, bi, n, k) \
- (bo)[n] = fl_tab[0][byte((bi)[n],0)] ^ \
- fl_tab[1][byte((bi)[((n) + 1) & 3],1)] ^ \
- fl_tab[2][byte((bi)[((n) + 2) & 3],2)] ^ \
- fl_tab[3][byte((bi)[((n) + 3) & 3],3)] ^ *((k) + (n))
-
-#define i_rl(bo, bi, n, k) \
- (bo)[n] = il_tab[0][byte((bi)[n],0)] ^ \
- il_tab[1][byte((bi)[((n) + 3) & 3],1)] ^ \
- il_tab[2][byte((bi)[((n) + 2) & 3],2)] ^ \
- il_tab[3][byte((bi)[((n) + 1) & 3],3)] ^ *((k) + (n))
-#else
-
-#define ls_box(x) \
- ((u4byte)sbx_tab[byte(x, 0)] << 0) ^ \
- ((u4byte)sbx_tab[byte(x, 1)] << 8) ^ \
- ((u4byte)sbx_tab[byte(x, 2)] << 16) ^ \
- ((u4byte)sbx_tab[byte(x, 3)] << 24)
-
-#define f_rl(bo, bi, n, k) \
- (bo)[n] = (u4byte)sbx_tab[byte((bi)[n],0)] ^ \
- rotl(((u4byte)sbx_tab[byte((bi)[((n) + 1) & 3],1)]), 8) ^ \
- rotl(((u4byte)sbx_tab[byte((bi)[((n) + 2) & 3],2)]), 16) ^ \
- rotl(((u4byte)sbx_tab[byte((bi)[((n) + 3) & 3],3)]), 24) ^ *((k) + (n))
-
-#define i_rl(bo, bi, n, k) \
- (bo)[n] = (u4byte)isb_tab[byte((bi)[n],0)] ^ \
- rotl(((u4byte)isb_tab[byte((bi)[((n) + 3) & 3],1)]), 8) ^ \
- rotl(((u4byte)isb_tab[byte((bi)[((n) + 2) & 3],2)]), 16) ^ \
- rotl(((u4byte)isb_tab[byte((bi)[((n) + 1) & 3],3)]), 24) ^ *((k) + (n))
-#endif
-
-static void
-gen_tabs(void)
-{
-#ifndef PRE_CALC_TABLES
- u4byte i,
- t;
- u1byte p,
- q;
-
- /* log and power tables for GF(2**8) finite field with */
- /* 0x11b as modular polynomial - the simplest prmitive */
- /* root is 0x11, used here to generate the tables */
-
- for (i = 0, p = 1; i < 256; ++i)
- {
- pow_tab[i] = (u1byte) p;
- log_tab[p] = (u1byte) i;
-
- p = p ^ (p << 1) ^ (p & 0x80 ? 0x01b : 0);
- }
-
- log_tab[1] = 0;
- p = 1;
-
- for (i = 0; i < 10; ++i)
- {
- rco_tab[i] = p;
-
- p = (p << 1) ^ (p & 0x80 ? 0x1b : 0);
- }
-
- /* note that the affine byte transformation matrix in */
- /* rijndael specification is in big endian format with */
- /* bit 0 as the most significant bit. In the remainder */
- /* of the specification the bits are numbered from the */
- /* least significant end of a byte. */
-
- for (i = 0; i < 256; ++i)
- {
- p = (i ? pow_tab[255 - log_tab[i]] : 0);
- q = p;
- q = (q >> 7) | (q << 1);
- p ^= q;
- q = (q >> 7) | (q << 1);
- p ^= q;
- q = (q >> 7) | (q << 1);
- p ^= q;
- q = (q >> 7) | (q << 1);
- p ^= q ^ 0x63;
- sbx_tab[i] = (u1byte) p;
- isb_tab[p] = (u1byte) i;
- }
-
- for (i = 0; i < 256; ++i)
- {
- p = sbx_tab[i];
-
-#ifdef LARGE_TABLES
-
- t = p;
- fl_tab[0][i] = t;
- fl_tab[1][i] = rotl(t, 8);
- fl_tab[2][i] = rotl(t, 16);
- fl_tab[3][i] = rotl(t, 24);
-#endif
- t = ((u4byte) ff_mult(2, p)) |
- ((u4byte) p << 8) |
- ((u4byte) p << 16) |
- ((u4byte) ff_mult(3, p) << 24);
-
- ft_tab[0][i] = t;
- ft_tab[1][i] = rotl(t, 8);
- ft_tab[2][i] = rotl(t, 16);
- ft_tab[3][i] = rotl(t, 24);
-
- p = isb_tab[i];
-
-#ifdef LARGE_TABLES
-
- t = p;
- il_tab[0][i] = t;
- il_tab[1][i] = rotl(t, 8);
- il_tab[2][i] = rotl(t, 16);
- il_tab[3][i] = rotl(t, 24);
-#endif
- t = ((u4byte) ff_mult(14, p)) |
- ((u4byte) ff_mult(9, p) << 8) |
- ((u4byte) ff_mult(13, p) << 16) |
- ((u4byte) ff_mult(11, p) << 24);
-
- it_tab[0][i] = t;
- it_tab[1][i] = rotl(t, 8);
- it_tab[2][i] = rotl(t, 16);
- it_tab[3][i] = rotl(t, 24);
- }
-
- tab_gen = 1;
-#endif /* !PRE_CALC_TABLES */
-}
-
-
-#define star_x(x) (((x) & 0x7f7f7f7f) << 1) ^ ((((x) & 0x80808080) >> 7) * 0x1b)
-
-#define imix_col(y,x) \
-do { \
- u = star_x(x); \
- v = star_x(u); \
- w = star_x(v); \
- t = w ^ (x); \
- (y) = u ^ v ^ w; \
- (y) ^= rotr(u ^ t, 8) ^ \
- rotr(v ^ t, 16) ^ \
- rotr(t,24); \
-} while (0)
-
-/* initialise the key schedule from the user supplied key */
-
-#define loop4(i) \
-do { t = ls_box(rotr(t, 8)) ^ rco_tab[i]; \
- t ^= e_key[4 * i]; e_key[4 * i + 4] = t; \
- t ^= e_key[4 * i + 1]; e_key[4 * i + 5] = t; \
- t ^= e_key[4 * i + 2]; e_key[4 * i + 6] = t; \
- t ^= e_key[4 * i + 3]; e_key[4 * i + 7] = t; \
-} while (0)
-
-#define loop6(i) \
-do { t = ls_box(rotr(t, 8)) ^ rco_tab[i]; \
- t ^= e_key[6 * (i)]; e_key[6 * (i) + 6] = t; \
- t ^= e_key[6 * (i) + 1]; e_key[6 * (i) + 7] = t; \
- t ^= e_key[6 * (i) + 2]; e_key[6 * (i) + 8] = t; \
- t ^= e_key[6 * (i) + 3]; e_key[6 * (i) + 9] = t; \
- t ^= e_key[6 * (i) + 4]; e_key[6 * (i) + 10] = t; \
- t ^= e_key[6 * (i) + 5]; e_key[6 * (i) + 11] = t; \
-} while (0)
-
-#define loop8(i) \
-do { t = ls_box(rotr(t, 8)) ^ rco_tab[i]; \
- t ^= e_key[8 * (i)]; e_key[8 * (i) + 8] = t; \
- t ^= e_key[8 * (i) + 1]; e_key[8 * (i) + 9] = t; \
- t ^= e_key[8 * (i) + 2]; e_key[8 * (i) + 10] = t; \
- t ^= e_key[8 * (i) + 3]; e_key[8 * (i) + 11] = t; \
- t = e_key[8 * (i) + 4] ^ ls_box(t); \
- e_key[8 * (i) + 12] = t; \
- t ^= e_key[8 * (i) + 5]; e_key[8 * (i) + 13] = t; \
- t ^= e_key[8 * (i) + 6]; e_key[8 * (i) + 14] = t; \
- t ^= e_key[8 * (i) + 7]; e_key[8 * (i) + 15] = t; \
-} while (0)
-
-rijndael_ctx *
-rijndael_set_key(rijndael_ctx *ctx, const u4byte *in_key, const u4byte key_len,
- int encrypt)
-{
- u4byte i,
- t,
- u,
- v,
- w;
- u4byte *e_key = ctx->e_key;
- u4byte *d_key = ctx->d_key;
-
- ctx->decrypt = !encrypt;
-
- if (!tab_gen)
- gen_tabs();
-
- ctx->k_len = (key_len + 31) / 32;
-
- e_key[0] = io_swap(in_key[0]);
- e_key[1] = io_swap(in_key[1]);
- e_key[2] = io_swap(in_key[2]);
- e_key[3] = io_swap(in_key[3]);
-
- switch (ctx->k_len)
- {
- case 4:
- t = e_key[3];
- for (i = 0; i < 10; ++i)
- loop4(i);
- break;
-
- case 6:
- e_key[4] = io_swap(in_key[4]);
- t = e_key[5] = io_swap(in_key[5]);
- for (i = 0; i < 8; ++i)
- loop6(i);
- break;
-
- case 8:
- e_key[4] = io_swap(in_key[4]);
- e_key[5] = io_swap(in_key[5]);
- e_key[6] = io_swap(in_key[6]);
- t = e_key[7] = io_swap(in_key[7]);
- for (i = 0; i < 7; ++i)
- loop8(i);
- break;
- }
-
- if (!encrypt)
- {
- d_key[0] = e_key[0];
- d_key[1] = e_key[1];
- d_key[2] = e_key[2];
- d_key[3] = e_key[3];
-
- for (i = 4; i < 4 * ctx->k_len + 24; ++i)
- imix_col(d_key[i], e_key[i]);
- }
-
- return ctx;
-}
-
-/* encrypt a block of text */
-
-#define f_nround(bo, bi, k) \
-do { \
- f_rn(bo, bi, 0, k); \
- f_rn(bo, bi, 1, k); \
- f_rn(bo, bi, 2, k); \
- f_rn(bo, bi, 3, k); \
- k += 4; \
-} while (0)
-
-#define f_lround(bo, bi, k) \
-do { \
- f_rl(bo, bi, 0, k); \
- f_rl(bo, bi, 1, k); \
- f_rl(bo, bi, 2, k); \
- f_rl(bo, bi, 3, k); \
-} while (0)
-
-void
-rijndael_encrypt(rijndael_ctx *ctx, const u4byte *in_blk, u4byte *out_blk)
-{
- u4byte k_len = ctx->k_len;
- u4byte *e_key = ctx->e_key;
- u4byte b0[4],
- b1[4],
- *kp;
-
- b0[0] = io_swap(in_blk[0]) ^ e_key[0];
- b0[1] = io_swap(in_blk[1]) ^ e_key[1];
- b0[2] = io_swap(in_blk[2]) ^ e_key[2];
- b0[3] = io_swap(in_blk[3]) ^ e_key[3];
-
- kp = e_key + 4;
-
- if (k_len > 6)
- {
- f_nround(b1, b0, kp);
- f_nround(b0, b1, kp);
- }
-
- if (k_len > 4)
- {
- f_nround(b1, b0, kp);
- f_nround(b0, b1, kp);
- }
-
- f_nround(b1, b0, kp);
- f_nround(b0, b1, kp);
- f_nround(b1, b0, kp);
- f_nround(b0, b1, kp);
- f_nround(b1, b0, kp);
- f_nround(b0, b1, kp);
- f_nround(b1, b0, kp);
- f_nround(b0, b1, kp);
- f_nround(b1, b0, kp);
- f_lround(b0, b1, kp);
-
- out_blk[0] = io_swap(b0[0]);
- out_blk[1] = io_swap(b0[1]);
- out_blk[2] = io_swap(b0[2]);
- out_blk[3] = io_swap(b0[3]);
-}
-
-/* decrypt a block of text */
-
-#define i_nround(bo, bi, k) \
-do { \
- i_rn(bo, bi, 0, k); \
- i_rn(bo, bi, 1, k); \
- i_rn(bo, bi, 2, k); \
- i_rn(bo, bi, 3, k); \
- k -= 4; \
-} while (0)
-
-#define i_lround(bo, bi, k) \
-do { \
- i_rl(bo, bi, 0, k); \
- i_rl(bo, bi, 1, k); \
- i_rl(bo, bi, 2, k); \
- i_rl(bo, bi, 3, k); \
-} while (0)
-
-void
-rijndael_decrypt(rijndael_ctx *ctx, const u4byte *in_blk, u4byte *out_blk)
-{
- u4byte b0[4],
- b1[4],
- *kp;
- u4byte k_len = ctx->k_len;
- u4byte *e_key = ctx->e_key;
- u4byte *d_key = ctx->d_key;
-
- b0[0] = io_swap(in_blk[0]) ^ e_key[4 * k_len + 24];
- b0[1] = io_swap(in_blk[1]) ^ e_key[4 * k_len + 25];
- b0[2] = io_swap(in_blk[2]) ^ e_key[4 * k_len + 26];
- b0[3] = io_swap(in_blk[3]) ^ e_key[4 * k_len + 27];
-
- kp = d_key + 4 * (k_len + 5);
-
- if (k_len > 6)
- {
- i_nround(b1, b0, kp);
- i_nround(b0, b1, kp);
- }
-
- if (k_len > 4)
- {
- i_nround(b1, b0, kp);
- i_nround(b0, b1, kp);
- }
-
- i_nround(b1, b0, kp);
- i_nround(b0, b1, kp);
- i_nround(b1, b0, kp);
- i_nround(b0, b1, kp);
- i_nround(b1, b0, kp);
- i_nround(b0, b1, kp);
- i_nround(b1, b0, kp);
- i_nround(b0, b1, kp);
- i_nround(b1, b0, kp);
- i_lround(b0, b1, kp);
-
- out_blk[0] = io_swap(b0[0]);
- out_blk[1] = io_swap(b0[1]);
- out_blk[2] = io_swap(b0[2]);
- out_blk[3] = io_swap(b0[3]);
-}
-
-/*
- * conventional interface
- *
- * ATM it hopes all data is 4-byte aligned - which
- * should be true for PX. -marko
- */
-
-void
-aes_set_key(rijndael_ctx *ctx, const uint8 *key, unsigned keybits, int enc)
-{
- uint32 *k;
-
- k = (uint32 *) key;
- rijndael_set_key(ctx, k, keybits, enc);
-}
-
-void
-aes_ecb_encrypt(rijndael_ctx *ctx, uint8 *data, unsigned len)
-{
- unsigned bs = 16;
- uint32 *d;
-
- while (len >= bs)
- {
- d = (uint32 *) data;
- rijndael_encrypt(ctx, d, d);
-
- len -= bs;
- data += bs;
- }
-}
-
-void
-aes_ecb_decrypt(rijndael_ctx *ctx, uint8 *data, unsigned len)
-{
- unsigned bs = 16;
- uint32 *d;
-
- while (len >= bs)
- {
- d = (uint32 *) data;
- rijndael_decrypt(ctx, d, d);
-
- len -= bs;
- data += bs;
- }
-}
-
-void
-aes_cbc_encrypt(rijndael_ctx *ctx, uint8 *iva, uint8 *data, unsigned len)
-{
- uint32 *iv = (uint32 *) iva;
- uint32 *d = (uint32 *) data;
- unsigned bs = 16;
-
- while (len >= bs)
- {
- d[0] ^= iv[0];
- d[1] ^= iv[1];
- d[2] ^= iv[2];
- d[3] ^= iv[3];
-
- rijndael_encrypt(ctx, d, d);
-
- iv = d;
- d += bs / 4;
- len -= bs;
- }
-}
-
-void
-aes_cbc_decrypt(rijndael_ctx *ctx, uint8 *iva, uint8 *data, unsigned len)
-{
- uint32 *d = (uint32 *) data;
- unsigned bs = 16;
- uint32 buf[4],
- iv[4];
-
- memcpy(iv, iva, bs);
- while (len >= bs)
- {
- buf[0] = d[0];
- buf[1] = d[1];
- buf[2] = d[2];
- buf[3] = d[3];
-
- rijndael_decrypt(ctx, buf, d);
-
- d[0] ^= iv[0];
- d[1] ^= iv[1];
- d[2] ^= iv[2];
- d[3] ^= iv[3];
-
- iv[0] = buf[0];
- iv[1] = buf[1];
- iv[2] = buf[2];
- iv[3] = buf[3];
- d += 4;
- len -= bs;
- }
-}
-
-/*
- * pre-calculate tables.
- *
- * On i386 lifts 17k from .bss to .rodata
- * and avoids 1k code and setup time.
- * -marko
- */
-#ifdef PRINT_TABS
-
-static void
-show256u8(char *name, uint8 *data)
-{
- int i;
-
- printf("static const u1byte %s[256] = {\n ", name);
- for (i = 0; i < 256;)
- {
- printf("%u", pow_tab[i++]);
- if (i < 256)
- printf(i % 16 ? ", " : ",\n ");
- }
- printf("\n};\n\n");
-}
-
-
-static void
-show4x256u32(char *name, uint32 data[4][256])
-{
- int i,
- j;
-
- printf("static const u4byte %s[4][256] = {\n{\n ", name);
- for (i = 0; i < 4; i++)
- {
- for (j = 0; j < 256;)
- {
- printf("0x%08x", data[i][j]);
- j++;
- if (j < 256)
- printf(j % 4 ? ", " : ",\n ");
- }
- printf(i < 3 ? "\n}, {\n " : "\n}\n");
- }
- printf("};\n\n");
-}
-
-int
-main()
-{
- int i;
- char *hdr = "/* Generated by rijndael.c */\n\n";
-
- gen_tabs();
-
- printf(hdr);
- show256u8("pow_tab", pow_tab);
- show256u8("log_tab", log_tab);
- show256u8("sbx_tab", sbx_tab);
- show256u8("isb_tab", isb_tab);
-
- show4x256u32("ft_tab", ft_tab);
- show4x256u32("it_tab", it_tab);
-#ifdef LARGE_TABLES
- show4x256u32("fl_tab", fl_tab);
- show4x256u32("il_tab", il_tab);
-#endif
- printf("static const u4byte rco_tab[10] = {\n ");
- for (i = 0; i < 10; i++)
- {
- printf("0x%08x", rco_tab[i]);
- if (i < 9)
- printf(", ");
- if (i == 4)
- printf("\n ");
- }
- printf("\n};\n\n");
- return 0;
-}
-
-#endif
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/101adfab/contrib/pgcrypto/rijndael.h
----------------------------------------------------------------------
diff --git a/contrib/pgcrypto/rijndael.h b/contrib/pgcrypto/rijndael.h
deleted file mode 100644
index e4c4229..0000000
--- a/contrib/pgcrypto/rijndael.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * $PostgreSQL: pgsql/contrib/pgcrypto/rijndael.h,v 1.7 2009/06/11 14:48:52 momjian Exp $
- *
- * $OpenBSD: rijndael.h,v 1.3 2001/05/09 23:01:32 markus Exp $ */
-
-/* This is an independent implementation of the encryption algorithm: */
-/* */
-/* RIJNDAEL by Joan Daemen and Vincent Rijmen */
-/* */
-/* which is a candidate algorithm in the Advanced Encryption Standard */
-/* programme of the US National Institute of Standards and Technology. */
-/* */
-/* Copyright in this implementation is held by Dr B R Gladman but I */
-/* hereby give permission for its free direct or derivative use subject */
-/* to acknowledgment of its origin and compliance with any conditions */
-/* that the originators of the algorithm place on its exploitation. */
-/* */
-/* Dr Brian Gladman (gladman@seven77.demon.co.uk) 14th January 1999 */
-
-#ifndef _RIJNDAEL_H_
-#define _RIJNDAEL_H_
-
-/* 1. Standard types for AES cryptography source code */
-
-typedef uint8 u1byte; /* an 8 bit unsigned character type */
-typedef uint16 u2byte; /* a 16 bit unsigned integer type */
-typedef uint32 u4byte; /* a 32 bit unsigned integer type */
-
-typedef int8 s1byte; /* an 8 bit signed character type */
-typedef int16 s2byte; /* a 16 bit signed integer type */
-typedef int32 s4byte; /* a 32 bit signed integer type */
-
-typedef struct _rijndael_ctx
-{
- u4byte k_len;
- int decrypt;
- u4byte e_key[64];
- u4byte d_key[64];
-} rijndael_ctx;
-
-
-/* 2. Standard interface for AES cryptographic routines */
-
-/* These are all based on 32 bit unsigned values and will therefore */
-/* require endian conversions for big-endian architectures */
-
-rijndael_ctx *
- rijndael_set_key(rijndael_ctx *, const u4byte *, const u4byte, int);
-void rijndael_encrypt(rijndael_ctx *, const u4byte *, u4byte *);
-void rijndael_decrypt(rijndael_ctx *, const u4byte *, u4byte *);
-
-/* conventional interface */
-
-void aes_set_key(rijndael_ctx *ctx, const uint8 *key, unsigned keybits, int enc);
-void aes_ecb_encrypt(rijndael_ctx *ctx, uint8 *data, unsigned len);
-void aes_ecb_decrypt(rijndael_ctx *ctx, uint8 *data, unsigned len);
-void aes_cbc_encrypt(rijndael_ctx *ctx, uint8 *iva, uint8 *data, unsigned len);
-void aes_cbc_decrypt(rijndael_ctx *ctx, uint8 *iva, uint8 *data, unsigned len);
-
-#endif /* _RIJNDAEL_H_ */