aboutsummaryrefslogtreecommitdiff
path: root/Lib/fontTools/misc/eexec.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/fontTools/misc/eexec.py')
-rw-r--r--Lib/fontTools/misc/eexec.py166
1 files changed, 86 insertions, 80 deletions
diff --git a/Lib/fontTools/misc/eexec.py b/Lib/fontTools/misc/eexec.py
index d1d4bb6a..cafa312c 100644
--- a/Lib/fontTools/misc/eexec.py
+++ b/Lib/fontTools/misc/eexec.py
@@ -16,98 +16,104 @@ from fontTools.misc.textTools import bytechr, bytesjoin, byteord
def _decryptChar(cipher, R):
- cipher = byteord(cipher)
- plain = ( (cipher ^ (R>>8)) ) & 0xFF
- R = ( (cipher + R) * 52845 + 22719 ) & 0xFFFF
- return bytechr(plain), R
+ cipher = byteord(cipher)
+ plain = ((cipher ^ (R >> 8))) & 0xFF
+ R = ((cipher + R) * 52845 + 22719) & 0xFFFF
+ return bytechr(plain), R
+
def _encryptChar(plain, R):
- plain = byteord(plain)
- cipher = ( (plain ^ (R>>8)) ) & 0xFF
- R = ( (cipher + R) * 52845 + 22719 ) & 0xFFFF
- return bytechr(cipher), R
+ plain = byteord(plain)
+ cipher = ((plain ^ (R >> 8))) & 0xFF
+ R = ((cipher + R) * 52845 + 22719) & 0xFFFF
+ return bytechr(cipher), R
def decrypt(cipherstring, R):
- r"""
- Decrypts a string using the Type 1 encryption algorithm.
-
- Args:
- cipherstring: String of ciphertext.
- R: Initial key.
-
- Returns:
- decryptedStr: Plaintext string.
- R: Output key for subsequent decryptions.
-
- Examples::
-
- >>> testStr = b"\0\0asdadads asds\265"
- >>> decryptedStr, R = decrypt(testStr, 12321)
- >>> decryptedStr == b'0d\nh\x15\xe8\xc4\xb2\x15\x1d\x108\x1a<6\xa1'
- True
- >>> R == 36142
- True
- """
- plainList = []
- for cipher in cipherstring:
- plain, R = _decryptChar(cipher, R)
- plainList.append(plain)
- plainstring = bytesjoin(plainList)
- return plainstring, int(R)
+ r"""
+ Decrypts a string using the Type 1 encryption algorithm.
+
+ Args:
+ cipherstring: String of ciphertext.
+ R: Initial key.
+
+ Returns:
+ decryptedStr: Plaintext string.
+ R: Output key for subsequent decryptions.
+
+ Examples::
+
+ >>> testStr = b"\0\0asdadads asds\265"
+ >>> decryptedStr, R = decrypt(testStr, 12321)
+ >>> decryptedStr == b'0d\nh\x15\xe8\xc4\xb2\x15\x1d\x108\x1a<6\xa1'
+ True
+ >>> R == 36142
+ True
+ """
+ plainList = []
+ for cipher in cipherstring:
+ plain, R = _decryptChar(cipher, R)
+ plainList.append(plain)
+ plainstring = bytesjoin(plainList)
+ return plainstring, int(R)
+
def encrypt(plainstring, R):
- r"""
- Encrypts a string using the Type 1 encryption algorithm.
-
- Note that the algorithm as described in the Type 1 specification requires the
- plaintext to be prefixed with a number of random bytes. (For ``eexec`` the
- number of random bytes is set to 4.) This routine does *not* add the random
- prefix to its input.
-
- Args:
- plainstring: String of plaintext.
- R: Initial key.
-
- Returns:
- cipherstring: Ciphertext string.
- R: Output key for subsequent encryptions.
-
- Examples::
-
- >>> testStr = b"\0\0asdadads asds\265"
- >>> decryptedStr, R = decrypt(testStr, 12321)
- >>> decryptedStr == b'0d\nh\x15\xe8\xc4\xb2\x15\x1d\x108\x1a<6\xa1'
- True
- >>> R == 36142
- True
-
- >>> testStr = b'0d\nh\x15\xe8\xc4\xb2\x15\x1d\x108\x1a<6\xa1'
- >>> encryptedStr, R = encrypt(testStr, 12321)
- >>> encryptedStr == b"\0\0asdadads asds\265"
- True
- >>> R == 36142
- True
- """
- cipherList = []
- for plain in plainstring:
- cipher, R = _encryptChar(plain, R)
- cipherList.append(cipher)
- cipherstring = bytesjoin(cipherList)
- return cipherstring, int(R)
+ r"""
+ Encrypts a string using the Type 1 encryption algorithm.
+
+ Note that the algorithm as described in the Type 1 specification requires the
+ plaintext to be prefixed with a number of random bytes. (For ``eexec`` the
+ number of random bytes is set to 4.) This routine does *not* add the random
+ prefix to its input.
+
+ Args:
+ plainstring: String of plaintext.
+ R: Initial key.
+
+ Returns:
+ cipherstring: Ciphertext string.
+ R: Output key for subsequent encryptions.
+
+ Examples::
+
+ >>> testStr = b"\0\0asdadads asds\265"
+ >>> decryptedStr, R = decrypt(testStr, 12321)
+ >>> decryptedStr == b'0d\nh\x15\xe8\xc4\xb2\x15\x1d\x108\x1a<6\xa1'
+ True
+ >>> R == 36142
+ True
+
+ >>> testStr = b'0d\nh\x15\xe8\xc4\xb2\x15\x1d\x108\x1a<6\xa1'
+ >>> encryptedStr, R = encrypt(testStr, 12321)
+ >>> encryptedStr == b"\0\0asdadads asds\265"
+ True
+ >>> R == 36142
+ True
+ """
+ cipherList = []
+ for plain in plainstring:
+ cipher, R = _encryptChar(plain, R)
+ cipherList.append(cipher)
+ cipherstring = bytesjoin(cipherList)
+ return cipherstring, int(R)
def hexString(s):
- import binascii
- return binascii.hexlify(s)
+ import binascii
+
+ return binascii.hexlify(s)
+
def deHexString(h):
- import binascii
- h = bytesjoin(h.split())
- return binascii.unhexlify(h)
+ import binascii
+
+ h = bytesjoin(h.split())
+ return binascii.unhexlify(h)
if __name__ == "__main__":
- import sys
- import doctest
- sys.exit(doctest.testmod().failed)
+ import sys
+ import doctest
+
+ sys.exit(doctest.testmod().failed)