Example #1
0
 def export_simpleblob(self, rsa_key):
     result = PUBLICKEYSTRUC_s.pack(bType_SIMPLEBLOB, CUR_BLOB_VERSION, self.alg_id)
     if rsa_key.alg_id != CALG_RSA_KEYX:
         raise ValueError('SIMPLEBLOB export only supported under RSA key')
     result += struct.pack('<I', CALG_RSA_KEYX)
     result += rsa_key.encrypt(self.key)
     return result
Example #2
0
 def export_publickeyblob(self):
     n = self.key.key.n
     e = self.key.key.e
     n_bytes = long_to_bytes(n)[::-1]
     result = PUBLICKEYSTRUC_s.pack(bType_PUBLICKEYBLOB, CUR_BLOB_VERSION, CALG_RSA_KEYX)
     result += RSAPUBKEY_s.pack(RSAPUBKEY_MAGIC, len(n_bytes) * 8, e)
     result += n_bytes
     return result
Example #3
0
    def export_privatekeyblob(self):
        key = self.key.key
        n = key.n
        e = key.e
        d = key.d
        p = key.p
        q = key.q

        n_bytes = long_to_bytes(n)[::-1]
        key_len = len(n_bytes) * 8
        result = PUBLICKEYSTRUC_s.pack(bType_PRIVATEKEYBLOB, CUR_BLOB_VERSION, CALG_RSA_KEYX)
        result += RSAPUBKEY_s.pack(PRIVATEKEYBLOB_MAGIC, key_len, e)
        result += n_bytes
        result += long_to_bytes(p, key_len / 16)[::-1]
        result += long_to_bytes(q, key_len / 16)[::-1]
        result += long_to_bytes(d % (p - 1), key_len / 16)[::-1]
        result += long_to_bytes(d % (q - 1), key_len / 16)[::-1]
        result += long_to_bytes(inverse(q, p), key_len / 16)[::-1]
        result += long_to_bytes(d, key_len / 8)[::-1]
        return result
Example #4
0
 def export_plaintextkeyblob(self):
     result = PUBLICKEYSTRUC_s.pack(bType_PLAINTEXTKEYBLOB, 2, self.alg_id)
     result += struct.pack('<I', len(self.key))
     result += self.key
     return result
Example #5
0
 def export_plaintextkeyblob(self):
     result = PUBLICKEYSTRUC_s.pack(bType_PLAINTEXTKEYBLOB, 2, self.alg_id)
     result += struct.pack('<I', len(self.key))
     result += self.key
     return result