You have a choice already. You can import any library you like and use that 
for encryption. The issue is making the default choice more easily 
available. A built-in web2py faction cannot have a parameter to choose the 
encryption algorithm because web2py only comes with AES.

On Tuesday, 25 June 2013 17:26:35 UTC-5, Derek wrote:
>
> Something other than AES, yes. Perhaps ECE (elliptic curve encryption) or 
> something other than AES. Shouldn't I have a choice?
>
> On Tuesday, June 25, 2013 1:36:56 PM UTC-7, Niphlod wrote:
>>
>> because you want something else from AES ?
>>
>> On Tuesday, June 25, 2013 10:31:47 PM UTC+2, Derek wrote:
>>>
>>> Only if there is an optional algorithm argument.
>>>
>>> On Tuesday, June 25, 2013 1:23:32 PM UTC-7, Massimo Di Pierro wrote:
>>>>
>>>> Should we include decrypt(key,data) and encrypt(key,data) in 
>>>> gluon.utils?
>>>>
>>>> On Tuesday, 25 June 2013 13:42:29 UTC-5, Niphlod wrote:
>>>>>
>>>>> sorry, cut&paste error.
>>>>>
>>>>>
>>>>>
>>>>> import gluon.contrib.aes as AES
>>>>> import threading 
>>>>> import os
>>>>> import base64
>>>>>
>>>>> def fast_urandom16(urandom=[], locker=threading.RLock()):
>>>>>     """
>>>>>     this is 4x faster than calling os.urandom(16) and prevents
>>>>>     the "too many files open" issue with concurrent access to 
>>>>> os.urandom()
>>>>>     """
>>>>>     try:
>>>>>         return urandom.pop()
>>>>>     except IndexError:
>>>>>         try:
>>>>>             locker.acquire()
>>>>>             ur = os.urandom(16 * 1024)
>>>>>             urandom += [ur[i:i + 16] for i in xrange(16, 1024 * 16, 16
>>>>> )]
>>>>>             return ur[0:16]
>>>>>         finally:
>>>>>             locker.release()
>>>>>             
>>>>> def pad(s, n=32, padchar=' '):
>>>>>     return s + (32 - len(s) % 32) * padchar
>>>>>
>>>>> def AES_new(key, IV=None):
>>>>>     """ Returns an AES cipher object and random IV if None specified 
>>>>> """
>>>>>     if IV is None:
>>>>>         IV = fast_urandom16()
>>>>>
>>>>>     return AES.new(key, AES.MODE_CBC, IV), IV
>>>>>
>>>>> def w2p_encrypt(data):
>>>>>     key = 'asdsaddasdasdas'
>>>>>     key = pad(key[:32])
>>>>>     cipher, IV = AES_new(key)
>>>>>     encrypted_data = IV + cipher.encrypt(pad(data))
>>>>>     return base64.urlsafe_b64encode(encrypted_data)
>>>>>
>>>>> def w2p_decrypt(data):
>>>>>     key = 'asdsaddasdasdas'
>>>>>     key = pad(key[:32])
>>>>>     data = base64.urlsafe_b64decode(data)
>>>>>     IV, data = data[:16], data[16:]
>>>>>     cipher, _ = AES_new(key, IV=IV)
>>>>>     data = cipher.decrypt(data)
>>>>>     data = data.rstrip(' ')
>>>>>     return data
>>>>>
>>>>> db.define_table('t_test',
>>>>>                 Field('f_field')
>>>>>                 )
>>>>>
>>>>> db.t_test.f_field.filter_in = lambda value : w2p_encrypt(value)
>>>>> db.t_test.f_field.filter_out = lambda value : w2p_decrypt(value)
>>>>>
>>>>>
>>>>>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to