Source code for alibabacloud_oss_v2.crypto.master_rsa_cipher

import json
from typing import Optional,  Dict
from Crypto.Cipher import PKCS1_v1_5
from Crypto.PublicKey import RSA
from .types import MasterCipher

[docs] class MasterRsaCipher(MasterCipher): """MasterRsaCipher implements rsa master key interface """ def __init__( self, mat_desc: Optional[Dict] = None, public_key: Optional[str] = None, private_key: Optional[str] = None, ): self._public_key = public_key self._private_key = private_key self._mat_desc = None if mat_desc is not None and len(mat_desc.items()) > 0: self._mat_desc = json.dumps(mat_desc) self._encrypt_obj = None if public_key is not None: self._encrypt_obj = PKCS1_v1_5.new(RSA.importKey(public_key)) self._decrypt_obj = None if private_key is not None: self._decrypt_obj = PKCS1_v1_5.new(RSA.importKey(private_key))
[docs] def get_wrap_algorithm(self) -> str: return 'RSA/NONE/PKCS1Padding'
[docs] def get_mat_desc(self) -> str: return self._mat_desc or ''
[docs] def encrypt(self, data: bytes) -> bytes: if self._encrypt_obj is None: raise ValueError('RSA public key is none or invalid.') return self._encrypt_obj.encrypt(data)
[docs] def decrypt(self, data: bytes) -> bytes: if self._decrypt_obj is None: raise ValueError('RSA private key is none or invalid.') decrypted_data = self._decrypt_obj.decrypt(data, object) if decrypted_data == object: raise ValueError('Decrypted data error, please check RSA private key!') return decrypted_data