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")
Exemplo n.º 2
0
 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)
Exemplo n.º 3
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)
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
 def from_der(cls, der, context=GLOBAL_CONTEXT):
     return PrivateKey(int_to_bytes_padded(PrivateKeyInfo.load(der).native['private_key']['private_key']), context)
Exemplo n.º 6
0
 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
     )