diff options
Diffstat (limited to 'hgsshsign/keys.py')
-rw-r--r-- | hgsshsign/keys.py | 45 |
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 | ||
72 | def load_private_key(filename): | 72 | class 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: | |
83 | def 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) | ||