def test_load() -> None: # not RSA with pytest.raises(ValueError): TextbookRsaPrivateKey.load(b""" -----BEGIN PRIVATE KEY----- MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgCaUaXQQho8ZJzBxW GAUaaZYXpCrAIkTGQ4SNFPgc8a6hRANCAARuhfAJsHe80Rqp5wI4IxhM8QDk5CgV eQcGofFqXjiWpch0OAKBQTbCqdvAnmXzG2rqfA4sJNwGIIi6xXfZxQEn -----END PRIVATE KEY----- """) key_der = b64decode("".join(key_pem.strip().splitlines()[1:-1])) pki = PrivateKeyInfo.load(key_der) k0 = TextbookRsaPrivateKey.load(pki) k1 = TextbookRsaPrivateKey.load(key_pem) k2 = TextbookRsaPrivateKey.load(key_der) assert k0.private_exponent == key.private_exponent assert k1.private_exponent == key.private_exponent assert k2.private_exponent == key.private_exponent # public exponent is encoded as "00 01 00 01", i.e. bad leading zero. with pytest.raises(ValueError): TextbookRsaPrivateKey.load( b64decode(""" MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEA6cwdAA4K/x7+sHX5TS+rNtM/v3hDr+sdQr3Bbl0JCwKH yiWpVKt6fsKFCfsBD/Zvfe++Ot+GAAe/M2r2mN660QIEAAEAAQJAfERjfa35JlVBJmXuVppptMBf99NiltSvPtRBRfnp XpG7j6JFwAsAyKcsAFo4ZXMj3K71GLLVRXKNVArRSuwj4QIhAPwAaunIMWjw/wWA/I0vIqKf/i18DFe0Pv8q+SM54Ipl AiEA7YHA0rpJLQ6JIGHG/ZL9F8GKXtFf6sjlszYzBli8Uf0CIQDlFZgbiELqjFK49SYhTp0ky18siB1MSW4PV0h+rmmi RQIgExHN9515bqKyI+V14rpAk/24LHDHMMS8nK0HX8UUKckCIENRTBNmauD1vtBqstLj456t712kYvV3MFunRbc6hR7C """)) with pytest.raises(TypeError): TextbookRsaPrivateKey.load("Hello")
def from_pem(cls, ledger, pem) -> 'PrivateKey': der = pem_to_der(pem.encode()) try: key_int = ECPrivateKey.load(der).native['private_key'] except ValueError: key_int = PrivateKeyInfo.load(der).native['private_key']['private_key'] private_key = cPrivateKey.from_int(key_int) return cls(ledger, private_key, bytes((0,)*32), 0, 0)
def from_der(cls, der: bytes, context: Context = GLOBAL_CONTEXT): """ :param der: The private key encoded in DER format. :param context: :return: The private key. :rtype: PrivateKey """ return PrivateKey( int_to_bytes_padded( PrivateKeyInfo.load(der).native['private_key']['private_key']), context)
def from_pem(cls, pem: bytes, context: Context = GLOBAL_CONTEXT): """ :param pem: The private key encoded in PEM format. :param context: :return: The private key. :rtype: PrivateKey """ return PrivateKey( int_to_bytes_padded( PrivateKeyInfo.load( pem_to_der(pem)).native['private_key']['private_key']), context)
def from_der(cls, der, context=GLOBAL_CONTEXT): return PrivateKey(int_to_bytes_padded(PrivateKeyInfo.load(der).native['private_key']['private_key']), context)
def from_pem(cls, pem, context=GLOBAL_CONTEXT): return PrivateKey( int_to_bytes_padded(PrivateKeyInfo.load(pem_to_der(pem)).native['private_key']['private_key']), context )