IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

quelques soucies avec cerealizer ? Dump() s'avere delicat.


Sujet :

Python

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Points : 22
    Points
    22
    Par défaut quelques soucies avec cerealizer ? Dump() s'avere delicat.
    bonjour à tous,

    donc voilà chui sur un projet dans le domaine de la cryptographie et j'utilise python pour son implementation.

    dernierement j'ai eu à utiliser le module "Pickle" pour faire un dump() d'un objet RSA dans un fichier lors de la generation des clé
    ...

    RSAkey=RSA.generate(taille_cle,x.get_bytes)

    pickle.dump(RSAkey,fichier)
    fichier.close()
    ...


    jusque là ça va

    mais finalement je ne peut utiliser Pickle, car le PYS60( api de python sur les telephonne nokia équipé du symbian) ne l'admet po dans sa lib

    donc j'ai cherché et fini par trouver "Cerealizer" qui fait le meme travaille que Pickle, tout en restant un module independant

    mais l'emplilement de l'objet RSA cité en haut pose probleme il demande a faire un register() qui n'a po voulu fonctionné non plus, comme suit:
    ...
    import cerealizer as pickle
    ...
    RSAkey=RSA.generate(taille_cle,x.get_bytes)
    pickle.dump(RSAkey,fichier)


    #pickle.register("qlq chose") n'a po voulu fonctionné, enfin il n'a po donné les

    résultat souhaités

    voici l'erreur généré

    NonCerealizableObjectError: Object of class/type 'Crypto.PublicKey.RSA.RSAobj' cannot be cerealized! Use cerealizer.register to extend Cerealizer support to other classes.

    que suis je sensé faire ?? merci pour votre aide, elle me sera preciseuse !

    Juba

  2. #2
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Points : 22
    Points
    22
    Par défaut rien de nouveau ??
    alors personne n'a pi m'aider ?
    besoin de plus de details .. ??
    merci d'y jeter ou rejeter un oeil

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    D'après la doc, le register est nécessaire.
    La classe RASObj, est-elle implémentée en C ou en Python ? As-tu le code source ?
    Que se passe-t-il si tu essaie d'afficher le dictionnaire d'une de ses instances ?
    Si cela ne fonctionne pas, ou qu'il n'affiche pas l'état complet de l'objet, toujours d'après la doc il faudrait implémenter les méthodes __getstate__ et __setstate__, ou un handler spécialisé. Tu peux soit modifier le code source, ou essayer de créer une classe qui hérite de RSAObj et définit ces méthodes (mais sans le code source, cela risque d'être problématique).

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Points : 22
    Points
    22
    Par défaut ça peciste
    salut

    alors j'ai pris le temps de faire qlq tests plus l'affichage du __dict__ de l'instance de RSAobj qui a donné le résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    print RSAkey.__dict__
    {'e': 65537L, 'd': 98312019162605524414069013867419189713666015795245231976933608750621220426201087669194069317108306888395755931327870517004390051402233484483047333961575716589550689501229319505810564502856527178016790832850497176495051534688328718366371056035100284371679697833554388949407411470965364416305532747977895199745L, 'n': 164733963997230472835059341425369488552478259285461923912668692899607867740640741526282770526573100545735136440770982053408588433185420737179522221462461360762844341658701368348216738540590600188797287132345963217041937664904729335129089453605596020917643322968615561868498175757811797667771066601119464652601L, 'q': 12937566131395238022583655549512857488245702709709662494495066431562946725001901844362035006556256165444584663382014187404118515255581095038144281562458833L, 'p': 12732994933063574157984536977383641574264998688160755594068264210529528340822908753071234826339869424995460101341529057306575565280894422610076181650462697L, 'u': 12856964234021363633765284959155234232660953613156483568978868583241666389391269800728367494622023416793245204119558169353212142230540797049679878172024231L}
     
    print RSAkey.__getstate__
    <bound method RSAobj.__getstate__ of <Crypto.PublicKey.RSA.RSAobj instance at 0x016B7D50>>
    print RSAkey.__setstate__
    <bound method RSAobj.__setstate__ of <Crypto.PublicKey.RSA.RSAobj instance at 0x016B7D50>>
    donc le dict é complet ainsi que les deux methode get et set .. tout ce beau monde est bel est bien implementé

    et j'ai essayé de faire un heritage pour crée les méthodes manquantes pour le register()

    mais rien affaire, car la class RSA n'existe po au sens propre, mais "matrialisé" par l'objet de la class RSAobj

    voici qlq ligne du module RSA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    object = RSAobj
    generate_py = generate
    construct_py = construct
    po d'__init__ ou de __name__ à l'horizon

    les methodes generate et construct sont hors class (de RASobj)
    et l'objet que je desire empiler fait appelle justement à generate()

    donc le probleme é de réferencé la class qui instancie l'objet qui fait appelle a generate() lol ... je suis bloqué là-dessus.

    j'ai RSA.py (donc impl. en python)

    voilà si tu need d'autres details je suis là, on y arrivera

    merci pour votre aide, "elle m'est precieuse"

    Juba

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Points : 22
    Points
    22
    Par défaut RSA.py
    donc voici RSA.py

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
     
    from Crypto.PublicKey import pubkey
    from Crypto.Util import number
     
    try:
        from Crypto.PublicKey import _fastmath
    except ImportError:
        _fastmath = None
     
    class error (Exception):
        pass
     
    def generate(bits, randfunc, progress_func=None):
        """generate(bits:int, randfunc:callable, progress_func:callable)
     
        Generate an RSA key of length 'bits', using 'randfunc' to get
        random data and 'progress_func', if present, to display
        the progress of the key generation.
        """
        obj=RSAobj()
     
        # Generate the prime factors of n
        if progress_func:
            progress_func('p,q\n')
        p = q = 1L
        while number.size(p*q) < bits:
            p = pubkey.getPrime(bits/2, randfunc)
            q = pubkey.getPrime(bits/2, randfunc)
     
        # p shall be smaller than q (for calc of u)
        if p > q:
            (p, q)=(q, p)
        obj.p = p
        obj.q = q
     
        if progress_func:
            progress_func('u\n')
        obj.u = pubkey.inverse(obj.p, obj.q)
        obj.n = obj.p*obj.q
     
        obj.e = 65537L
        if progress_func:
            progress_func('d\n')
        obj.d=pubkey.inverse(obj.e, (obj.p-1)*(obj.q-1))
     
        assert bits <= 1+obj.size(), "Generated key is too small"
     
        return obj
     
    def construct(tuple):
        """construct(tuple:(long,) : RSAobj
        Construct an RSA object from a 2-, 3-, 5-, or 6-tuple of numbers.
        """
     
        obj=RSAobj()
        if len(tuple) not in [2,3,5,6]:
            raise error, 'argument for construct() wrong length'
        for i in range(len(tuple)):
            field = obj.keydata[i]
            setattr(obj, field, tuple[i])
        if len(tuple) >= 5:
            # Ensure p is smaller than q 
            if obj.p>obj.q:
                (obj.p, obj.q)=(obj.q, obj.p)
     
        if len(tuple) == 5:
            # u not supplied, so we're going to have to compute it.
            obj.u=pubkey.inverse(obj.p, obj.q)
     
        return obj
     
    class RSAobj(pubkey.pubkey):
        keydata = ['n', 'e', 'd', 'p', 'q', 'u']
        def _encrypt(self, plaintext, K=''):
            if self.n<=plaintext:
                raise error, 'Plaintext too large'
            return (pow(plaintext, self.e, self.n),)
     
        def _decrypt(self, ciphertext):
            if (not hasattr(self, 'd')):
                raise error, 'Private key not available in this object'
            if self.n<=ciphertext[0]:
                raise error, 'Ciphertext too large'
            return pow(ciphertext[0], self.d, self.n)
     
        def _sign(self, M, K=''):
            return (self._decrypt((M,)),)
     
        def _verify(self, M, sig):
            m2=self._encrypt(sig[0])
            if m2[0]==M:
                return 1
            else: return 0
     
        def _blind(self, M, B):
            tmp = pow(B, self.e, self.n)
            return (M * tmp) % self.n
     
        def _unblind(self, M, B):
            tmp = pubkey.inverse(B, self.n)
            return  (M * tmp) % self.n
     
        def can_blind (self):
            """can_blind() : bool
            Return a Boolean value recording whether this algorithm can
            blind data.  (This does not imply that this
            particular key object has the private information required to
            to blind a message.)
            """
            return 1
     
        def size(self):
            """size() : int
            Return the maximum number of bits that can be handled by this key.
            """
            return number.size(self.n) - 1
     
        def has_private(self):
            """has_private() : bool
            Return a Boolean denoting whether the object contains
            private components.
            """
            if hasattr(self, 'd'):
                return 1
            else: return 0
     
        def publickey(self):
            """publickey(): RSAobj
            Return a new key object containing only the public key information.
            """
            return construct((self.n, self.e))
     
    class RSAobj_c(pubkey.pubkey):
        keydata = ['n', 'e', 'd', 'p', 'q', 'u']
     
        def __init__(self, key):
            self.key = key
     
        def __getattr__(self, attr):
            if attr in self.keydata:
                return getattr(self.key, attr)
            else:
                if self.__dict__.has_key(attr):
                    self.__dict__[attr]
                else:
                    raise AttributeError, '%s instance has no attribute %s' % (self.__class__, attr)
     
        def __getstate__(self):
            d = {}
            for k in self.keydata:
                if hasattr(self.key, k):
                    d[k]=getattr(self.key, k)
            return d
     
        def __setstate__(self, state):
            n,e = state['n'], state['e']
            if not state.has_key('d'):
                self.key = _fastmath.rsa_construct(n,e)
            else:
                d = state['d']
                if not state.has_key('q'):
                    self.key = _fastmath.rsa_construct(n,e,d)
                else:
                    p, q, u = state['p'], state['q'], state['u']
                    self.key = _fastmath.rsa_construct(n,e,d,p,q,u)
     
        def _encrypt(self, plain, K):
            return (self.key._encrypt(plain),)
     
        def _decrypt(self, cipher):
            return self.key._decrypt(cipher[0])
     
        def _sign(self, M, K):
            return (self.key._sign(M),)
     
        def _verify(self, M, sig):
            return self.key._verify(M, sig[0])
     
        def _blind(self, M, B):
            return self.key._blind(M, B)
     
        def _unblind(self, M, B):
            return self.key._unblind(M, B)
     
        def can_blind (self):
            return 1
     
        def size(self):
            return self.key.size()
     
        def has_private(self):
            return self.key.has_private()
     
        def publickey(self):
            return construct_c((self.key.n, self.key.e))
     
    def generate_c(bits, randfunc, progress_func = None):
        # Generate the prime factors of n
        if progress_func:
            progress_func('p,q\n')
     
        p = q = 1L
        while number.size(p*q) < bits:
            p = pubkey.getPrime(bits/2, randfunc)
            q = pubkey.getPrime(bits/2, randfunc)
     
        # p shall be smaller than q (for calc of u)
        if p > q:
            (p, q)=(q, p)
        if progress_func:
            progress_func('u\n')
        u=pubkey.inverse(p, q)
        n=p*q
     
        e = 65537L
        if progress_func:
            progress_func('d\n')
        d=pubkey.inverse(e, (p-1)*(q-1))
        key = _fastmath.rsa_construct(n,e,d,p,q,u)
        obj = RSAobj_c(key)
     
    ##    print p
    ##    print q
    ##    print number.size(p), number.size(q), number.size(q*p),
    ##    print obj.size(), bits
        assert bits <= 1+obj.size(), "Generated key is too small"
        return obj
     
     
    def construct_c(tuple):
        key = apply(_fastmath.rsa_construct, tuple)
        return RSAobj_c(key)
     
    object = RSAobj
     
    generate_py = generate
    construct_py = construct
     
    if _fastmath:
        #print "using C version of RSA"
        generate = generate_c
        construct = construct_c
        error = _fastmath.error
    bon courage

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Comment as-tu appelé 'register' exactement ?
    Est-ce qu'une erreur est renvoyée ? Si non, est-ce que l'erreur renvoyer par 'dump' est différente après avoir fait le 'register' ?
    Est-ce bien ceci que tu as essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pickle.register(RSA.RSAObj)
    pickle.register(RSA.RSAObj_c)

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Points : 22
    Points
    22
    Par défaut code d'erreur
    salut,

    alors pour le dump() sans register, logiquement il ne marche po,
    pour faire le pickle.register() il faut mettre la classe source de l'objet que l'on desire empiler (je m'explique pour ne po me perdre ..)
    alors en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "C:\Documents and Settings\kH\Bureau\BlueSecure\crypto 1.0\keyGen.py", line 22, in <module>
        pickle.register(RSA.RSAObj_c)
    AttributeError: 'module' object has no attribute 'RSAObj_c'
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "C:\Documents and Settings\kH\Bureau\BlueSecure\crypto 1.0\keyGen.py", line 22, in <module>
        pickle.register(RSA.RSAObj_c)
    AttributeError: 'module' object has no attribute 'RSAObj'
    attends attends ... ben ché po par quel miracle !
    j'ai pu empilé mes clés

    et pour le load() pareil ça fonctionne aussi !
    et c'est tant mieux

    voilà merci bcp pour toutes t suggéstions, plus que fructueuses

    Juba

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Je me suis trompé dans mon dernier post; j'aurais dû écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pickle.register(RSA.RSAobj)
    pickle.register(RSA.RSAobj_c)
    Je n'avais pas vu que le 'o' était en minuscule dans le module RSA...

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Points : 22
    Points
    22
    Par défaut ok
    ah merci, mais le probleme ce posé ailleurs,probleme de référencement,et pour un ancien programmeur je laisse le copié collé comme dernier recours lol

    en tk merci pour ton coup de pousse,

    amicalement

    Juba

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quelques soucis avec Curve Fitting ?
    Par hsazerty dans le forum MATLAB
    Réponses: 0
    Dernier message: 27/03/2008, 18h28
  2. Réponses: 7
    Dernier message: 24/03/2007, 17h47
  3. quelques soucis avec l'url rewriting
    Par romain_paris dans le forum Apache
    Réponses: 10
    Dernier message: 17/09/2006, 17h51
  4. Quelques soucis avec un lecteur MP3
    Par Guesh13 dans le forum Audio
    Réponses: 3
    Dernier message: 20/02/2006, 15h57
  5. quelques soucis avec word 2000
    Par ramchou dans le forum Word
    Réponses: 3
    Dernier message: 06/09/2004, 19h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo