Example #1
0
 def _pkcs1imify(self, data):
     """
     turn a 20-byte SHA1 hash into a blob of data as large as the key's N,
     using PKCS1's \"emsa-pkcs1-v1_5\" encoding.  totally bizarre.
     """
     size = len(util.deflate_long(self.n, 0))
     filler = max_byte * (size - len(SHA1_DIGESTINFO) - len(data) - 3)
     return zero_byte + one_byte + filler + zero_byte + SHA1_DIGESTINFO + data
Example #2
0
 def _pkcs1imify(self, data):
     """
     turn a 20-byte SHA1 hash into a blob of data as large as the key's N,
     using PKCS1's \"emsa-pkcs1-v1_5\" encoding.  totally bizarre.
     """
     size = len(util.deflate_long(self.n, 0))
     filler = max_byte * (size - len(SHA1_DIGESTINFO) - len(data) - 3)
     return zero_byte + one_byte + filler + zero_byte + SHA1_DIGESTINFO + data
Example #3
0
    def sign_ssh_data(self, data):
        digest = sha1(data).digest()
        rsa = self._private_key()
        sig = util.deflate_long(rsa.sign(self._pkcs1imify(digest), bytes())[0], 0)

        m = bytearray()
        m += sshtype.encodeString("ssh-rsa")
        m += sshtype.encodeBinary(sig)
        return m
Example #4
0
    def sign_ssh_data(self, data):
        digest = sha1(data).digest()
        rsa = self._private_key()
        sig = util.deflate_long(\
            rsa.sign(self._pkcs1imify(digest), bytes())[0], 0)

        m = bytearray()
        m += sshtype.encodeString('ssh-rsa')
        m += sshtype.encodeBinary(sig)
        return m
Example #5
0
 def sign_ssh_data(self, data):
     digest = sha1(data).digest()
     dss = DSA.construct((int(self.y), int(self.g), int(self.p), int(self.q), int(self.x)))
     # generate a suitable k
     qsize = len(util.deflate_long(self.q, 0))
     while True:
         k = util.inflate_long(os.urandom(qsize), 1)
         if (k > 2) and (k < self.q):
             break
     r, s = dss.sign(util.inflate_long(digest, 1), k)
     m = bytearray()
     m += sshtype.encodeString("ssh-dss")
     # apparently, in rare cases, r or s may be shorter than 20 bytes!
     rstr = util.deflate_long(r, 0)
     sstr = util.deflate_long(s, 0)
     if len(rstr) < 20:
         rstr = zero_byte * (20 - len(rstr)) + rstr
     if len(sstr) < 20:
         sstr = zero_byte * (20 - len(sstr)) + sstr
     m += sshtype.encodeBinary(rstr + sstr)
     return m
Example #6
0
 def sign_ssh_data(self, data):
     digest = sha1(data).digest()
     dss = DSA.construct(
         (int(self.y), int(self.g), int(self.p), int(self.q), int(self.x)))
     # generate a suitable k
     qsize = len(util.deflate_long(self.q, 0))
     while True:
         k = util.inflate_long(os.urandom(qsize), 1)
         if (k > 2) and (k < self.q):
             break
     r, s = dss.sign(util.inflate_long(digest, 1), k)
     m = bytearray()
     m += sshtype.encodeString("ssh-dss")
     # apparently, in rare cases, r or s may be shorter than 20 bytes!
     rstr = util.deflate_long(r, 0)
     sstr = util.deflate_long(s, 0)
     if len(rstr) < 20:
         rstr = zero_byte * (20 - len(rstr)) + rstr
     if len(sstr) < 20:
         sstr = zero_byte * (20 - len(sstr)) + sstr
     m += sshtype.encodeBinary(rstr + sstr)
     return m
Example #7
0
def encodeMpint(val):
    buf = putil.deflate_long(val)
    length = struct.pack(">L", len(buf))
    return length + buf
Example #8
0
def encodeMpint(val):
    buf = putil.deflate_long(val)
    length = struct.pack(">L", len(buf))
    return length + buf