Пример #1
0
 def encrypt(self, pk, m, salt=None):
     octetlen = int(ceil(int(pk['N']).bit_length() / 8.0))
     EM = self.paddingscheme.encode(m, octetlen, "", salt)
     if debug: print("EM == >", EM)
     i = Conversion.OS2IP(EM)
     ip = integer(i) % pk['N']  #Convert to modular integer
     return (ip ** pk['e']) % pk['N']
Пример #2
0
 def encrypt(self, pk, m, salt=None):
     octetlen = int(ceil(int(pk['N']).bit_length() / 8.0))
     EM = self.paddingscheme.encode(m, octetlen, "", salt)
     if debug: print("EM == >", EM)
     i = Conversion.OS2IP(EM)
     ip = integer(i) % pk['N']  #Convert to modular integer
     return (ip**pk['e']) % pk['N']
Пример #3
0
    def hashToZn(self, value):
        if type(value) == pairing:
            h = hashlib.new(self.hash_type)
            h.update(self.group.serialize(value))
            #print "digest => %s" % h.hexdigest()
            # get raw bytes of digest and hash to Zr
            val = h.digest()
            return integer(int(self.group.hash(val, ZR)))
            # do something related to that
        if type(value) == integer:
            str_value = int2Bytes(value)
#            print("str_value =>", str_value)
#            val = self.group.hash(str_value, ZR)
#            print("hash =>", val)
            return integer(int(self.group.hash(str_value, ZR)))
        return None
Пример #4
0
 def random(self, type=ZR, seed=None):
     if type == GT: return self.__randomGT()
     elif type == ZR or type == G1 or type == G2:
         if seed != None:
             return self.Pairing.random(type, seed)
         return self.Pairing.random(type)
     else:
         return integer(randomBits(self.secparam))
Пример #5
0
 def random(self, type=ZR, count=1, seed=None):
     if type == GT:
         return self.__randomGT()
     elif type == ZR or type == G1 or type == G2:
         if seed != None and count == 1:
             return random(self.Pairing, type, seed)
         elif count > 1:
             return tuple([random(self.Pairing, type) for i in range(count)])
         return random(self.Pairing, type)
     else:
         return integer(randomBits(self.secparam))
Пример #6
0
    def encrypt(self, pk, m, salt=None):
        if(self.paddingscheme.name == "SAEPEncryptionPadding"):
            EM = self.paddingscheme.encode(m, pk['n'], pk['s0'])
        else:
            m = self.redundancyscheme.encode(m)
            octetlen = int(ceil(int(pk['N']).bit_length() / 8.0))
            EM = self.paddingscheme.encode(m, octetlen, "", salt)

        if debug: print("EM == >", EM)
        i = Conversion.OS2IP(EM)
        ip = integer(i) % pk['N']  #Convert to modular integer

        return (ip ** 2) % pk['N']
Пример #7
0
    def sign(self,sk, M, salt=None):
        #apply encoding

        while True:
            octetlen = int(ceil(int(sk['N']).bit_length() / 8.0))
            em = self.paddingscheme.encode(M, octetlen, "", salt)

            m = Conversion.OS2IP(em)
            m = integer(m) % sk['N']  #ERRROR m is larger than N
      
            p = sk['p']
            q = sk['q']
            yp = sk['yp']
            yq = sk['yq']

            mp = (m ** ((p+1)/4)) % p
            mq = (m ** ((q+1)/4)) % q

            r1 = ((int(yp)*int(p)*int(mq)) + ((int(yq)*int(q)*int(mp)))) % int(sk['N'])
            r2 = int(sk['N']) - int(r1)

            s1 = (int(yp)*int(p)*int(mq) - int(yq)*int(q)*int(mp)) % int(sk['N'])
            s2 = int(sk['N']) - int(s1)

            if(((int((integer(r1) ** 2) % sk['N'] - m)) == 0) or ((int((integer(r2) ** 2) % sk['N'] - m)) == 0) or ((int((integer(s1) ** 2) % sk['N'] - m)) == 0) or ((int((integer(s2) ** 2) % sk['N'] - m)) == 0)):
                break

        S = { 's1':r1, 's2':r2, 's3':s1, 's4':s2 }

        if debug:
            print("Signing")
            print("m     =>", m)
            print("em    =>", em)
            print("S     =>", S)

        return S
Пример #8
0
    def sign(self,sk, M, salt=None):
        #apply encoding

        while True:
            octetlen = int(ceil(int(sk['N']).bit_length() / 8.0))
            em = self.paddingscheme.encode(M, octetlen, "", salt)

            m = Conversion.OS2IP(em)
            m = integer(m) % sk['N']  #ERRROR m is larger than N
      
            p = sk['p']
            q = sk['q']
            yp = sk['yp']
            yq = sk['yq']

            mp = (m ** ((p+1)/4)) % p
            mq = (m ** ((q+1)/4)) % q

            r1 = ((int(yp)*int(p)*int(mq)) + ((int(yq)*int(q)*int(mp)))) % int(sk['N'])
            r2 = int(sk['N']) - int(r1)

            s1 = (int(yp)*int(p)*int(mq) - int(yq)*int(q)*int(mp)) % int(sk['N'])
            s2 = int(sk['N']) - int(s1)

            if(((int((integer(r1) ** 2) % sk['N'] - m)) == 0) or ((int((integer(r2) ** 2) % sk['N'] - m)) == 0) or ((int((integer(s1) ** 2) % sk['N'] - m)) == 0) or ((int((integer(s2) ** 2) % sk['N'] - m)) == 0)):
                break

        S = { 's1':r1, 's2':r2, 's3':s1, 's4':s2 }

        if debug:
            print("Signing")
            print("m     =>", m)
            print("em    =>", em)
            print("S     =>", S)

        return S
Пример #9
0
    def verify(self, pk, M, S, salt=None):
        #M = b'This is a malicious message'

        octetlen = int(ceil(int(pk['N']).bit_length() / 8.0))

        sig_mess = (integer(S['s1']) ** 2) % pk['N']
        sig_mess = Conversion.IP2OS(int(sig_mess), octetlen)
        if debug: print("OS1  =>", sig_mess)
        dec_mess = self.paddingscheme.decode(sig_mess)

        if debug:
            print("Verifying")
            print("sig_mess     =>", sig_mess)
            print("dec_mess    =>", dec_mess)
            print("S     =>", S)

        return (dec_mess == M)
Пример #10
0
    def verify(self, pk, M, S, salt=None):
        #M = b'This is a malicious message'

        octetlen = int(ceil(int(pk['N']).bit_length() / 8.0))

        sig_mess = (integer(S['s1']) ** 2) % pk['N']
        sig_mess = Conversion.IP2OS(int(sig_mess), octetlen)
        if debug: print("OS1  =>", sig_mess)
        dec_mess = self.paddingscheme.decode(sig_mess)

        if debug:
            print("Verifying")
            print("sig_mess     =>", sig_mess)
            print("dec_mess    =>", dec_mess)
            print("S     =>", S)

        return (dec_mess == M)
Пример #11
0
    def OS2IP(self, bytestr, element = False):
        '''
        :Return: A python ``int`` if element is False. An ``integer.Element`` if element is True
        
        Converts a byte string to an integer
        '''
        val = 0 
        for i in range(len(bytestr)):
            byt = bytestr[len(bytestr)-1-i]
            if not py3: byt = ord(byt)
            val += byt << (8 *i)

        #These lines convert val into a binary string of 1's and 0's 
        #bstr = bin(val)[2:]   #cut out the 0b header
        #val = int(bstr, 2)
        #return val
        if element:
            return integer(val)
        else:
            return val
Пример #12
0
    def OS2IP(self, bytestr, element=False):
        '''
        :Return: A python ``int`` if element is False. An ``integer.Element`` if element is True
        
        Converts a byte string to an integer
        '''
        val = 0
        for i in range(len(bytestr)):
            byt = bytestr[len(bytestr) - 1 - i]
            if not py3: byt = ord(byt)
            val += byt << (8 * i)

        #These lines convert val into a binary string of 1's and 0's
        #bstr = bin(val)[2:]   #cut out the 0b header
        #val = int(bstr, 2)
        #return val
        if element:
            return integer(val)
        else:
            return val
Пример #13
0
    def sign(self, sk, M, salt=None):
        # apply encoding
        modbits = int(sk["N"]).bit_length()
        k = int(ceil(modbits / 8.0))
        emLen = int(ceil((modbits - 1) / 8.0))

        em = self.paddingscheme.encode(M, modbits - 1, salt)
        m = Conversion.OS2IP(em)
        m = integer(m) % sk["N"]  # ERRROR m is larger than N
        s = (m ** sk["d"]) % sk["N"]
        S = Conversion.IP2OS(s, k)
        if debug:
            print("Signing")
            print("k     =>", k)
            print("emLen =>", emLen)
            print("m     =>", m)
            print("em    =>", em)
            print("s     =>", s)
            print("S     =>", S)
        return S
Пример #14
0
 def verify(self, pk, M, S):
     modbits = int(pk['N']).bit_length()
     k = int(ceil(modbits / 8.0))
     emLen = int(ceil((modbits - 1) / 8.0))
     if len(S) != k:
         if debug: print("Sig is %s octets long, not %" % (len(S), k))
         return False
     s = Conversion.OS2IP(S)
     s = integer(s) % pk['N']  #Convert to modular integer
     m = (s**pk['e']) % pk['N']
     EM = Conversion.IP2OS(m, emLen)
     if debug:
         print("Verifying")
         print("k     =>", k)
         print("emLen =>", emLen)
         print("s     =>", s)
         print("m       =>", m)
         print("em      =>", EM)
         print("S     =>", S)
     return self.paddingscheme.verify(M, EM, modbits - 1)
Пример #15
0
    def sign(self, sk, M, salt=None):
        #apply encoding
        modbits = int(sk['N']).bit_length()
        k = int(ceil(modbits / 8.0))
        emLen = int(ceil((modbits - 1) / 8.0))

        em = self.paddingscheme.encode(M, modbits - 1, salt)
        m = Conversion.OS2IP(em)
        m = integer(m) % sk['N']  #ERRROR m is larger than N
        s = (m**sk['d']) % sk['N']
        S = Conversion.IP2OS(s, k)
        if debug:
            print("Signing")
            print("k     =>", k)
            print("emLen =>", emLen)
            print("m     =>", m)
            print("em    =>", em)
            print("s     =>", s)
            print("S     =>", S)
        return S
Пример #16
0
 def verify(self, pk, M, S):
     modbits = int(pk['N']).bit_length()
     k = int(ceil(modbits / 8.0))
     emLen = int(ceil((modbits -1) / 8.0))
     if len(S) != k:
         if debug: print("Sig is %s octets long, not %" %(len(S), k))
         return False
     s = Conversion.OS2IP(S)
     s = integer(s) % pk['N']  #Convert to modular integer
     m = (s ** pk['e']) % pk['N']
     EM = Conversion.IP2OS(m, emLen)
     if debug:
         print("Verifying")
         print("k     =>", k)
         print("emLen =>", emLen)
         print("s     =>", s)
         print("m       =>", m)
         print("em      =>", EM)
         print("S     =>", S)
     return self.paddingscheme.verify(M, EM, modbits-1)
Пример #17
0
 def convert(self, N, e, d, p, q):
     return (integer(N), integer(e), integer(d), integer(p), integer(q))
Пример #18
0
 def bytes2integer(self, bytestr):
     '''Converts a bytes string to an integer object'''
     return integer(bytestr)
Пример #19
0
 def convert(self, N, p, q, yp, yq):
     return (integer(N), integer(p), integer(q), integer(yp), integer(yq))
Пример #20
0
 def bytes2integer(self, bytestr):
     '''Converts a bytes string to an integer object'''
     return integer(bytestr)
Пример #21
0
 def convert(self, N, p, q, yp, yq):
     return (integer(N), integer(p), integer(q), integer(yp), integer(yq))
Пример #22
0
 def convert(self, N, e, d, p, q):
     return (integer(N), integer(e), integer(d), integer(p), integer(q))