Skip to content

Commit 68edbfc

Browse files
v13.3.3 (#22)
1 parent 5752fb9 commit 68edbfc

File tree

10 files changed

+2816
-258
lines changed

10 files changed

+2816
-258
lines changed

.coverage

52 KB
Binary file not shown.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "sakit"
3-
version = "13.3.2"
3+
version = "13.3.3"
44
description = "Solana Agent Kit"
55
authors = ["Bevan Hunt <bevan@bevanhunt.com>"]
66
license = "MIT"

sakit/privy_recurring.py

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,43 @@ def _get_authorization_signature(url, body, privy_app_id, privy_auth_key):
3939
}
4040
serialized_payload = _canonicalize(payload)
4141
private_key_string = privy_auth_key.replace("wallet-auth:", "")
42-
private_key_pem = (
43-
f"-----BEGIN PRIVATE KEY-----\n{private_key_string}\n-----END PRIVATE KEY-----"
44-
)
45-
private_key = serialization.load_pem_private_key(
46-
private_key_pem.encode("utf-8"), password=None
47-
)
42+
43+
# Try to load the key - it could be in different formats
44+
private_key = None
45+
46+
# First, try as PKCS#8 PEM format (standard format from openssl genpkey)
47+
try:
48+
private_key_pem = f"-----BEGIN PRIVATE KEY-----\n{private_key_string}\n-----END PRIVATE KEY-----"
49+
private_key = serialization.load_pem_private_key(
50+
private_key_pem.encode("utf-8"), password=None
51+
)
52+
except (ValueError, TypeError):
53+
pass
54+
55+
# If that fails, try as EC PRIVATE KEY (SEC1) format
56+
if private_key is None:
57+
try:
58+
ec_key_pem = f"-----BEGIN EC PRIVATE KEY-----\n{private_key_string}\n-----END EC PRIVATE KEY-----"
59+
private_key = serialization.load_pem_private_key(
60+
ec_key_pem.encode("utf-8"), password=None
61+
)
62+
except (ValueError, TypeError):
63+
pass
64+
65+
# If that fails, try loading as raw DER bytes (PKCS#8)
66+
if private_key is None:
67+
try:
68+
der_bytes = base64.b64decode(private_key_string)
69+
private_key = serialization.load_der_private_key(der_bytes, password=None)
70+
except (ValueError, TypeError):
71+
pass
72+
73+
if private_key is None:
74+
raise ValueError(
75+
"Could not load private key. Expected base64-encoded PKCS#8 or SEC1 format. "
76+
"Generate with: openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256"
77+
)
78+
4879
signature = private_key.sign(
4980
serialized_payload.encode("utf-8"), ec.ECDSA(hashes.SHA256())
5081
)

sakit/privy_transfer.py

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,43 @@ def get_authorization_signature(url, body, privy_app_id, privy_auth_key):
2828
}
2929
serialized_payload = canonicalize(payload)
3030
private_key_string = privy_auth_key.replace("wallet-auth:", "")
31-
private_key_pem = (
32-
f"-----BEGIN PRIVATE KEY-----\n{private_key_string}\n-----END PRIVATE KEY-----"
33-
)
34-
private_key = serialization.load_pem_private_key(
35-
private_key_pem.encode("utf-8"), password=None
36-
)
31+
32+
# Try to load the key - it could be in different formats
33+
private_key = None
34+
35+
# First, try as PKCS#8 PEM format (standard format from openssl genpkey)
36+
try:
37+
private_key_pem = f"-----BEGIN PRIVATE KEY-----\n{private_key_string}\n-----END PRIVATE KEY-----"
38+
private_key = serialization.load_pem_private_key(
39+
private_key_pem.encode("utf-8"), password=None
40+
)
41+
except (ValueError, TypeError):
42+
pass
43+
44+
# If that fails, try as EC PRIVATE KEY (SEC1) format
45+
if private_key is None:
46+
try:
47+
ec_key_pem = f"-----BEGIN EC PRIVATE KEY-----\n{private_key_string}\n-----END EC PRIVATE KEY-----"
48+
private_key = serialization.load_pem_private_key(
49+
ec_key_pem.encode("utf-8"), password=None
50+
)
51+
except (ValueError, TypeError):
52+
pass
53+
54+
# If that fails, try loading as raw DER bytes (PKCS#8)
55+
if private_key is None:
56+
try:
57+
der_bytes = base64.b64decode(private_key_string)
58+
private_key = serialization.load_der_private_key(der_bytes, password=None)
59+
except (ValueError, TypeError):
60+
pass
61+
62+
if private_key is None:
63+
raise ValueError(
64+
"Could not load private key. Expected base64-encoded PKCS#8 or SEC1 format. "
65+
"Generate with: openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256"
66+
)
67+
3768
signature = private_key.sign(
3869
serialized_payload.encode("utf-8"), ec.ECDSA(hashes.SHA256())
3970
)

sakit/privy_trigger.py

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,43 @@ def _get_authorization_signature(url, body, privy_app_id, privy_auth_key):
3939
}
4040
serialized_payload = _canonicalize(payload)
4141
private_key_string = privy_auth_key.replace("wallet-auth:", "")
42-
private_key_pem = (
43-
f"-----BEGIN PRIVATE KEY-----\n{private_key_string}\n-----END PRIVATE KEY-----"
44-
)
45-
private_key = serialization.load_pem_private_key(
46-
private_key_pem.encode("utf-8"), password=None
47-
)
42+
43+
# Try to load the key - it could be in different formats
44+
private_key = None
45+
46+
# First, try as PKCS#8 PEM format (standard format from openssl genpkey)
47+
try:
48+
private_key_pem = f"-----BEGIN PRIVATE KEY-----\n{private_key_string}\n-----END PRIVATE KEY-----"
49+
private_key = serialization.load_pem_private_key(
50+
private_key_pem.encode("utf-8"), password=None
51+
)
52+
except (ValueError, TypeError):
53+
pass
54+
55+
# If that fails, try as EC PRIVATE KEY (SEC1) format
56+
if private_key is None:
57+
try:
58+
ec_key_pem = f"-----BEGIN EC PRIVATE KEY-----\n{private_key_string}\n-----END EC PRIVATE KEY-----"
59+
private_key = serialization.load_pem_private_key(
60+
ec_key_pem.encode("utf-8"), password=None
61+
)
62+
except (ValueError, TypeError):
63+
pass
64+
65+
# If that fails, try loading as raw DER bytes (PKCS#8)
66+
if private_key is None:
67+
try:
68+
der_bytes = base64.b64decode(private_key_string)
69+
private_key = serialization.load_der_private_key(der_bytes, password=None)
70+
except (ValueError, TypeError):
71+
pass
72+
73+
if private_key is None:
74+
raise ValueError(
75+
"Could not load private key. Expected base64-encoded PKCS#8 or SEC1 format. "
76+
"Generate with: openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256"
77+
)
78+
4879
signature = private_key.sign(
4980
serialized_payload.encode("utf-8"), ec.ECDSA(hashes.SHA256())
5081
)

sakit/privy_ultra.py

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,43 @@ def get_authorization_signature(url, body, privy_app_id, privy_auth_key):
3838
}
3939
serialized_payload = canonicalize(payload)
4040
private_key_string = privy_auth_key.replace("wallet-auth:", "")
41-
private_key_pem = (
42-
f"-----BEGIN PRIVATE KEY-----\n{private_key_string}\n-----END PRIVATE KEY-----"
43-
)
44-
private_key = serialization.load_pem_private_key(
45-
private_key_pem.encode("utf-8"), password=None
46-
)
41+
42+
# Try to load the key - it could be in different formats
43+
private_key = None
44+
45+
# First, try as PKCS#8 PEM format (standard format from openssl genpkey)
46+
try:
47+
private_key_pem = f"-----BEGIN PRIVATE KEY-----\n{private_key_string}\n-----END PRIVATE KEY-----"
48+
private_key = serialization.load_pem_private_key(
49+
private_key_pem.encode("utf-8"), password=None
50+
)
51+
except (ValueError, TypeError):
52+
pass
53+
54+
# If that fails, try as EC PRIVATE KEY (SEC1) format
55+
if private_key is None:
56+
try:
57+
ec_key_pem = f"-----BEGIN EC PRIVATE KEY-----\n{private_key_string}\n-----END EC PRIVATE KEY-----"
58+
private_key = serialization.load_pem_private_key(
59+
ec_key_pem.encode("utf-8"), password=None
60+
)
61+
except (ValueError, TypeError):
62+
pass
63+
64+
# If that fails, try loading as raw DER bytes (PKCS#8)
65+
if private_key is None:
66+
try:
67+
der_bytes = base64.b64decode(private_key_string)
68+
private_key = serialization.load_der_private_key(der_bytes, password=None)
69+
except (ValueError, TypeError):
70+
pass
71+
72+
if private_key is None:
73+
raise ValueError(
74+
"Could not load private key. Expected base64-encoded PKCS#8 or SEC1 format. "
75+
"Generate with: openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256"
76+
)
77+
4778
signature = private_key.sign(
4879
serialized_payload.encode("utf-8"), ec.ECDSA(hashes.SHA256())
4980
)

0 commit comments

Comments
 (0)