Update demo_dynamic.py
added error strings (with function returning a string type) and a decryption to ChCha.
This commit is contained in:
		
							parent
							
								
									87d876f6ac
								
							
						
					
					
						commit
						695c3b235d
					
				@ -1,7 +1,7 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
    demo_dynamic.py                                     v2
 | 
			
		||||
    demo_dynamic.py                                     v2b
 | 
			
		||||
 | 
			
		||||
    This program demonstrates Python's use of the dynamic
 | 
			
		||||
    language support additions to LTC, namely access to LTC
 | 
			
		||||
@ -33,11 +33,12 @@
 | 
			
		||||
              mathlib.  For example, public key crypto requires
 | 
			
		||||
              a mathlib; hashing and symmetric encryption do not.
 | 
			
		||||
 | 
			
		||||
    This code was written for Python 2.7.
 | 
			
		||||
    This code was written for Python 2.7 with the ctypes standard
 | 
			
		||||
    library.
 | 
			
		||||
 | 
			
		||||
    Larry Bugbee
 | 
			
		||||
    March 2014      v1
 | 
			
		||||
    August 2017     v2
 | 
			
		||||
    August 2017     v2b
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
@ -195,6 +196,13 @@ def _get_constant(name):
 | 
			
		||||
        raise Exception('LTC.crypt_get_constant(%s) rc = %d' % (name, rc))
 | 
			
		||||
    return constant.value
 | 
			
		||||
 | 
			
		||||
def _err2str(err):
 | 
			
		||||
    # define return type
 | 
			
		||||
    errstr = LTC.error_to_string
 | 
			
		||||
    errstr.restype = c_char_p
 | 
			
		||||
    # get and return err string
 | 
			
		||||
    return errstr(err)
 | 
			
		||||
 | 
			
		||||
CRYPT_OK = _get_constant('CRYPT_OK')
 | 
			
		||||
 | 
			
		||||
class SHA256(object):
 | 
			
		||||
@ -213,15 +221,17 @@ class ChaCha(object):
 | 
			
		||||
        self.state   = c_buffer(_get_size('chacha_state'))
 | 
			
		||||
        self.counter = c_int(1)
 | 
			
		||||
        err = LTC.chacha_setup(byref(self.state), key, len(key), rounds)
 | 
			
		||||
        if err != CRYPT_OK:
 | 
			
		||||
            raise Exception('LTC.chacha_setup(), err = %d, "%s"' % (err, _err2str(err)))
 | 
			
		||||
    def set_iv32(self, iv):
 | 
			
		||||
        err = LTC.chacha_ivctr32(byref(self.state), iv, len(iv), byref(self.counter))
 | 
			
		||||
        if err != CRYPT_OK:
 | 
			
		||||
            raise Exception('LTC.chacha_ivctr32() err = %d' % err)
 | 
			
		||||
            raise Exception('LTC.chacha_ivctr32(), err = %d, "%s"' % (err, _err2str(err)))
 | 
			
		||||
    def crypt(self, datain):
 | 
			
		||||
        dataout = c_buffer(len(datain))
 | 
			
		||||
        err = LTC.chacha_crypt(byref(self.state), datain, len(datain), byref(dataout))
 | 
			
		||||
        if err != CRYPT_OK:
 | 
			
		||||
            raise Exception('LTC.chacha_crypt() err = %d' % err)
 | 
			
		||||
            raise Exception('LTC.chacha_crypt(), err = %d, "%s"' % (err, _err2str(err)))
 | 
			
		||||
        return dataout.raw
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - -
 | 
			
		||||
@ -254,9 +264,16 @@ if SHOW_CHACHA_EXAMPLE:
 | 
			
		||||
    cha.set_iv32(iv)
 | 
			
		||||
    cipher = cha.crypt(plain)
 | 
			
		||||
 | 
			
		||||
    template = '\n  ChaCha%d ciphertext for "%s" is "%s" \n'
 | 
			
		||||
    template = '\n  ChaCha%d ciphertext   for "%s" is "%s"'
 | 
			
		||||
    print template % (rounds, plain, cipher.encode('hex'))
 | 
			
		||||
    
 | 
			
		||||
    # reset to decrypt
 | 
			
		||||
    cha.set_iv32(iv)
 | 
			
		||||
    decrypted = cha.crypt(cipher)
 | 
			
		||||
 | 
			
		||||
    template = '  ChaCha%d decoded text for "%s" is "%s" \n'
 | 
			
		||||
    print template % (rounds, plain, decrypted)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user