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
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
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
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
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
def encodeMpint(val): buf = putil.deflate_long(val) length = struct.pack(">L", len(buf)) return length + buf