summaryrefslogtreecommitdiff
path: root/hgsshsign/keys.py
diff options
context:
space:
mode:
Diffstat (limited to 'hgsshsign/keys.py')
-rw-r--r--hgsshsign/keys.py45
1 files changed, 26 insertions, 19 deletions
diff --git a/hgsshsign/keys.py b/hgsshsign/keys.py
index aa291eb..c723872 100644
--- a/hgsshsign/keys.py
+++ b/hgsshsign/keys.py
@@ -69,22 +69,29 @@ class PublicKey(object):
69 fp.close() 69 fp.close()
70 70
71 71
72def load_private_key(filename): 72class PrivateKey(object):
73 fp = open(filename) 73
74 try: 74 def __init__(self, instance):
75 first_line = fp.readline() 75 self.instance = instance
76 finally: 76
77 fp.close() 77 @classmethod
78 78 def from_file(cls, filename):
79 type = DSA if 'DSA' in first_line else RSA 79 fp = open(filename)
80 return type.load_key(filename) 80 try:
81 81 first_line = fp.readline()
82 82 finally:
83def sign_like_agent(data, key): 83 fp.close()
84 """ 84
85 Emulates the signing behavior of an ssh key agent. 85 type_ = DSA if 'DSA' in first_line else RSA
86 """ 86 instance = type_.load_key(filename)
87 digest = MessageDigest('sha1') 87
88 digest.update(data) 88 return cls(instance)
89 my_data = digest.final() 89
90 return key.sign(data) 90 def sign(self, data):
91 """
92 Emulates the signing behavior of an ssh key agent.
93 """
94 digest = MessageDigest('sha1')
95 digest.update(data)
96 my_data = digest.final()
97 return self.instance.sign(data)