[poppler] poppler/Decrypt.cc
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Apr 25 20:29:49 UTC 2019
poppler/Decrypt.cc | 134 +++++++++++++++++++++++++++++++++++++++--------------
1 file changed, 99 insertions(+), 35 deletions(-)
New commits:
commit e0ef346c0f669140076c4cf443f07ea0770996da
Author: Albert Astals Cid <aacid at kde.org>
Date: Fri Sep 21 00:32:24 2018 +0200
Make the mul tables be calculated at compile time with constexpr
diff --git a/poppler/Decrypt.cc b/poppler/Decrypt.cc
index db66786c..ed405856 100644
--- a/poppler/Decrypt.cc
+++ b/poppler/Decrypt.cc
@@ -762,55 +762,119 @@ static inline void invShiftRows(unsigned char *state) {
}
// {02} \cdot s
-static inline unsigned char mul02(unsigned char s) {
- return (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1);
-}
+struct Mul02Table
+{
+ constexpr Mul02Table() : values()
+ {
+ for(int s = 0; s < 256; s++) {
+ values[s] = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1);
+ }
+ }
+
+ constexpr unsigned char operator()(uint8_t i) const { return values[i]; }
+
+ unsigned char values[256];
+};
+
+static constexpr Mul02Table mul02;
// {03} \cdot s
-static inline unsigned char mul03(unsigned char s) {
- unsigned char s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1);
- return s ^ s2;
-}
+struct Mul03Table
+{
+ constexpr Mul03Table() : values()
+ {
+ for(int s=0; s<256; s++) {
+ const unsigned char s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1);
+ values[s] = s ^ s2;
+ }
+ }
+
+ constexpr unsigned char operator()(uint8_t i) const { return values[i]; }
+
+ unsigned char values[256];
+};
+
+static constexpr Mul03Table mul03;
// {09} \cdot s
-static inline unsigned char mul09(unsigned char s) {
- unsigned char s2, s4, s8;
+struct Mul09Table
+{
+ constexpr Mul09Table() : values()
+ {
+ for(int s=0; s<256; s++) {
+ const unsigned char s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1);
+ const unsigned char s4 = (s2 & 0x80) ? ((s2 << 1) ^ 0x1b) : (s2 << 1);
+ const unsigned char s8 = (s4 & 0x80) ? ((s4 << 1) ^ 0x1b) : (s4 << 1);
+ values[s] = s ^ s8;
+ }
+ }
- s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1);
- s4 = (s2 & 0x80) ? ((s2 << 1) ^ 0x1b) : (s2 << 1);
- s8 = (s4 & 0x80) ? ((s4 << 1) ^ 0x1b) : (s4 << 1);
- return s ^ s8;
-}
+ constexpr unsigned char operator()(uint8_t i) const { return values[i]; }
+
+ unsigned char values[256];
+};
+
+static constexpr Mul09Table mul09;
// {0b} \cdot s
-static inline unsigned char mul0b(unsigned char s) {
- unsigned char s2, s4, s8;
+struct Mul0bTable
+{
+ constexpr Mul0bTable() : values()
+ {
+ for(int s=0; s<256; s++) {
+ const unsigned char s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1);
+ const unsigned char s4 = (s2 & 0x80) ? ((s2 << 1) ^ 0x1b) : (s2 << 1);
+ const unsigned char s8 = (s4 & 0x80) ? ((s4 << 1) ^ 0x1b) : (s4 << 1);
+ values[s] = s ^ s2 ^ s8;
+ }
+ }
- s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1);
- s4 = (s2 & 0x80) ? ((s2 << 1) ^ 0x1b) : (s2 << 1);
- s8 = (s4 & 0x80) ? ((s4 << 1) ^ 0x1b) : (s4 << 1);
- return s ^ s2 ^ s8;
-}
+ constexpr unsigned char operator()(uint8_t i) const { return values[i]; }
+
+ unsigned char values[256];
+};
+
+static constexpr Mul0bTable mul0b;
// {0d} \cdot s
-static inline unsigned char mul0d(unsigned char s) {
- unsigned char s2, s4, s8;
+struct Mul0dTable
+{
+ constexpr Mul0dTable() : values()
+ {
+ for(int s=0; s<256; s++) {
+ const unsigned char s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1);
+ const unsigned char s4 = (s2 & 0x80) ? ((s2 << 1) ^ 0x1b) : (s2 << 1);
+ const unsigned char s8 = (s4 & 0x80) ? ((s4 << 1) ^ 0x1b) : (s4 << 1);
+ values[s] = s ^ s4 ^ s8;
+ }
+ }
- s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1);
- s4 = (s2 & 0x80) ? ((s2 << 1) ^ 0x1b) : (s2 << 1);
- s8 = (s4 & 0x80) ? ((s4 << 1) ^ 0x1b) : (s4 << 1);
- return s ^ s4 ^ s8;
-}
+ constexpr unsigned char operator()(uint8_t i) const { return values[i]; }
+
+ unsigned char values[256];
+};
+
+static constexpr Mul0dTable mul0d;
// {0e} \cdot s
-static inline unsigned char mul0e(unsigned char s) {
- unsigned char s2, s4, s8;
+struct Mul0eTable
+{
+ constexpr Mul0eTable() : values()
+ {
+ for(int s=0; s<256; s++) {
+ const unsigned char s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1);
+ const unsigned char s4 = (s2 & 0x80) ? ((s2 << 1) ^ 0x1b) : (s2 << 1);
+ const unsigned char s8 = (s4 & 0x80) ? ((s4 << 1) ^ 0x1b) : (s4 << 1);
+ values[s] = s2 ^ s4 ^ s8;
+ }
+ }
- s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1);
- s4 = (s2 & 0x80) ? ((s2 << 1) ^ 0x1b) : (s2 << 1);
- s8 = (s4 & 0x80) ? ((s4 << 1) ^ 0x1b) : (s4 << 1);
- return s2 ^ s4 ^ s8;
-}
+ constexpr unsigned char operator()(uint8_t i) const { return values[i]; }
+
+ unsigned char values[256];
+};
+
+static constexpr Mul0eTable mul0e;
static inline void mixColumns(unsigned char *state) {
int c;
More information about the poppler
mailing list