@@ -138,80 +138,88 @@ def verify_tls(self, crt: str, key: str) -> None:
138138 self .fail (f'Invalid cert/key pair: { e } ' )
139139
140140
141- # subcommand functions
142- def password_hash (args : Namespace ) -> None :
143- data = json .loads (sys .stdin .read ())
141+ def _read () -> str :
142+ return sys .stdin .read ()
143+
144+
145+ def _load () -> Dict [str , Any ]:
146+ return json .loads (_read ())
147+
148+
149+ def _respond (data : Dict [str , Any ]) -> None :
150+ json .dump (data , sys .stdout )
151+
152+
153+ def _write (content : str ) -> None :
154+ sys .stdout .write (content )
155+ sys .stdout .flush ()
156+
157+
158+ def _fail (msg : str , code : int = 0 ) -> Any :
159+ json .dump ({'error' : msg }, sys .stdout )
160+ sys .exit (code )
161+
144162
163+ def password_hash (args : Namespace ) -> None :
164+ data = _load ()
145165 password = data ['password' ]
146166 salt_password = data ['salt_password' ]
147-
148- hash_str = InternalCryptoCaller ().password_hash (password , salt_password )
149- json .dump ({'hash' : hash_str }, sys .stdout )
167+ hash_str = args .crypto .password_hash (password , salt_password )
168+ _respond ({'hash' : hash_str })
150169
151170
152171def verify_password (args : Namespace ) -> None :
153- icc = InternalCryptoCaller ()
154- data = json .loads (sys .stdin .read ())
172+ data = _load ()
155173 password = data .get ('password' , '' )
156174 hashed_password = data .get ('hashed_password' , '' )
157175 try :
158- icc .verify_password (password , hashed_password )
176+ ok = args . crypto .verify_password (password , hashed_password )
159177 except ValueError as err :
160- _fail_message (str (err ))
161- json .dump ({'ok' : ok }, sys .stdout )
178+ _fail (str (err ))
179+ _respond ({'ok' : ok })
180+
181+
182+ def create_private_key (args : Namespace ) -> None :
183+ _write (args .crypto .create_private_key ())
162184
163185
164186def create_self_signed_cert (args : Namespace ) -> None :
165- icc = InternalCryptoCaller ()
166- # Generate private key
167- if args .private_key :
168- # create a key pair
169- print (icc .create_private_key ())
170- return
171-
172- data = json .loads (sys .stdin .read ())
187+ data = _load ()
173188 dname = data ['dname' ]
174- print (icc .create_self_signed_cert (dname , data ['private_key' ]))
189+ private_key = data ['private_key' ]
190+ _write (args .crypto .create_self_signed_cert (dname , private_key ))
175191
176192
177193def certificate_days_to_expire (args : Namespace ) -> None :
178- icc = InternalCryptoCaller ()
179- crt = sys .stdin .read ()
194+ crt = _read ()
180195 try :
181- days_until_exp = icc .certificate_days_to_expire (crt )
196+ days_until_exp = args . crypto .certificate_days_to_expire (crt )
182197 except InternalError as err :
183- print (str (err ), file = sys .stderr )
184- sys .exit (1 )
185- json .dump ({'days_until_expiration' : days_until_exp }, sys .stdout )
198+ _fail (str (err ))
199+ _respond ({'days_until_expiration' : days_until_exp })
186200
187201
188202def get_cert_issuer_info (args : Namespace ) -> None :
189- crt = sys .stdin .read ()
190- org_name , cn = InternalCryptoCaller ().get_cert_issuer_info (crt )
191- json .dump ({'org_name' : org_name , 'cn' : cn }, sys .stdout )
192-
193-
194- def _fail_message (msg : str ) -> None :
195- json .dump ({'error' : msg }, sys .stdout )
196- sys .exit (0 )
203+ crt = _read ()
204+ org_name , cn = args .crypto .get_cert_issuer_info (crt )
205+ _respond ({'org_name' : org_name , 'cn' : cn })
197206
198207
199208def verify_tls (args : Namespace ) -> None :
200- data = json .loads (sys .stdin .read ())
201-
209+ data = _load ()
202210 crt = data ['crt' ]
203211 key = data ['key' ]
204-
205212 try :
206- InternalCryptoCaller () .verify_tls (crt , key )
213+ args . crypto .verify_tls (crt , key )
207214 except ValueError as err :
208- json . dump ({ 'error' : str (err )}, sys . stdout )
209- json . dump ({'ok' : True }, sys . stdout ) # need to emit something on success
215+ _fail ( str (err ))
216+ _respond ({'ok' : True }) # need to emit something on success
210217
211218
212- def main ():
219+ def main () -> None :
213220 # create the top-level parser
214221 parser = argparse .ArgumentParser (prog = 'cryptotools.py' )
222+ parser .set_defaults (crypto = InternalCryptoCaller ())
215223 subparsers = parser .add_subparsers (required = True )
216224
217225 # create the parser for the "password_hash" command
@@ -220,14 +228,11 @@ def main():
220228
221229 # create the parser for the "create_self_signed_cert" command
222230 parser_cssc = subparsers .add_parser ('create_self_signed_cert' )
223- parser_cssc .add_argument (
224- '--private_key' , required = False , action = 'store_true'
225- )
226- parser_cssc .add_argument (
227- '--certificate' , required = False , action = 'store_true'
228- )
229231 parser_cssc .set_defaults (func = create_self_signed_cert )
230232
233+ parser_cpk = subparsers .add_parser ('create_private_key' )
234+ parser_cpk .set_defaults (func = create_private_key )
235+
231236 # create the parser for the "certificate_days_to_expire" command
232237 parser_dte = subparsers .add_parser ('certificate_days_to_expire' )
233238 parser_dte .set_defaults (func = certificate_days_to_expire )
0 commit comments