@ethernity-cloud/sdk-js 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +185 -0
- package/build.js +22 -0
- package/init.js +301 -0
- package/nodenithy/build/las/Dockerfile +5 -0
- package/nodenithy/build/securelock/Dockerfile.tmpl +65 -0
- package/nodenithy/build/securelock/scripts/binary-fs-build.sh +28 -0
- package/nodenithy/build/securelock/src/.env +3 -0
- package/nodenithy/build/securelock/src/etny_crypto.js +201 -0
- package/nodenithy/build/securelock/src/etny_exec.js +65 -0
- package/nodenithy/build/securelock/src/image_registry_abi.js +808 -0
- package/nodenithy/build/securelock/src/models.js +261 -0
- package/nodenithy/build/securelock/src/package.json +40 -0
- package/nodenithy/build/securelock/src/pox_abi.js +1491 -0
- package/nodenithy/build/securelock/src/securelock.js.tmpl +421 -0
- package/nodenithy/build/securelock/src/swift_stream_service.js +147 -0
- package/nodenithy/build/securelock/src/task_status.js +15 -0
- package/nodenithy/build/securelock/src/wallet.js +29 -0
- package/nodenithy/build/squash/Dockerfile +7 -0
- package/nodenithy/build/trustedzone/Dockerfile.tmpl +57 -0
- package/nodenithy/build/trustedzone/scripts/binary-fs-build.sh +22 -0
- package/nodenithy/build/trustedzone/src/.env +3 -0
- package/nodenithy/build/trustedzone/src/etny_crypto.js +202 -0
- package/nodenithy/build/trustedzone/src/etny_exec.js +54 -0
- package/nodenithy/build/trustedzone/src/image_registry_abi.js +808 -0
- package/nodenithy/build/trustedzone/src/models.js +261 -0
- package/nodenithy/build/trustedzone/src/package.json +40 -0
- package/nodenithy/build/trustedzone/src/pox_abi.js +1491 -0
- package/nodenithy/build/trustedzone/src/swift_stream_service.js +147 -0
- package/nodenithy/build/trustedzone/src/task_status.js +15 -0
- package/nodenithy/build/trustedzone/src/test.js +44 -0
- package/nodenithy/build/trustedzone/src/trustedzone.js.tmpl +508 -0
- package/nodenithy/build/trustedzone/src/wallet.js +28 -0
- package/nodenithy/build/validator/Dockerfile +58 -0
- package/nodenithy/build/validator/package-lock.json +6 -0
- package/nodenithy/build/validator/scripts/binary-fs-build.sh +19 -0
- package/nodenithy/build/validator/src/.env +3 -0
- package/nodenithy/build/validator/src/cert.pem +5 -0
- package/nodenithy/build/validator/src/etny_crypto.js +204 -0
- package/nodenithy/build/validator/src/etny_exec.js +52 -0
- package/nodenithy/build/validator/src/image_registry_abi.js +808 -0
- package/nodenithy/build/validator/src/key.pem +6 -0
- package/nodenithy/build/validator/src/models.js +261 -0
- package/nodenithy/build/validator/src/package-lock.json +2498 -0
- package/nodenithy/build/validator/src/package.json +40 -0
- package/nodenithy/build/validator/src/pox_abi.js +1491 -0
- package/nodenithy/build/validator/src/swift_stream_service.js +147 -0
- package/nodenithy/build/validator/src/task_status.js +15 -0
- package/nodenithy/build/validator/src/test.js +44 -0
- package/nodenithy/build/validator/src/trustedzone.js +613 -0
- package/nodenithy/build/validator/src/validator_abi.js +834 -0
- package/nodenithy/build/validator/src/wallet.js +28 -0
- package/nodenithy/build.js +184 -0
- package/nodenithy/build.mjs +179 -0
- package/nodenithy/build.sh +161 -0
- package/nodenithy/ipfs.js +135 -0
- package/nodenithy/ipfs.mjs +551 -0
- package/nodenithy/public/favicon.ico +0 -0
- package/nodenithy/public/index.html +43 -0
- package/nodenithy/public/logo192.png +0 -0
- package/nodenithy/public/logo512.png +0 -0
- package/nodenithy/public/manifest.json +25 -0
- package/nodenithy/public/robots.txt +3 -0
- package/nodenithy/run/__pycache__/swift_stream_service.cpython-312.pyc +0 -0
- package/nodenithy/run/app/input.txt +4 -0
- package/nodenithy/run/app/payload.js +4 -0
- package/nodenithy/run/docker-compose-final.yml.tmpl +65 -0
- package/nodenithy/run/docker-compose-swift-stream.yml +17 -0
- package/nodenithy/run/docker-compose.yml.tmpl +76 -0
- package/nodenithy/run/etny-securelock-test.yaml.tpl +46 -0
- package/nodenithy/run/etny-trustedzone-test.yaml.tpl +45 -0
- package/nodenithy/run/git.sh +22 -0
- package/nodenithy/run/image_registry.abi +1 -0
- package/nodenithy/run/image_registry.js +372 -0
- package/nodenithy/run/image_registry.py +327 -0
- package/nodenithy/run/image_registry_runner.py +71 -0
- package/nodenithy/run/ipfs.sh +58 -0
- package/nodenithy/run/ipfs_pre.sh +75 -0
- package/nodenithy/run/public_key_service.js +90 -0
- package/nodenithy/run/public_key_service.py +107 -0
- package/nodenithy/run/swift_stream_service.py +212 -0
- package/nodenithy/run/swiftstream.py +37 -0
- package/nodenithy/run/swiftstream1.py +27 -0
- package/nodenithy/run.js +538 -0
- package/nodenithy/run.sh +277 -0
- package/nodenithy/scripts/build-ipfs-upload.sh +23 -0
- package/nodenithy/scripts/build.sh +40 -0
- package/nodenithy/scripts/ipfs-daemon.sh +7 -0
- package/nodenithy/scripts/run.sh +50 -0
- package/nodenithy/src/App.css +57 -0
- package/nodenithy/src/ec_helloworld_example.js +64 -0
- package/nodenithy/src/index.css +13 -0
- package/nodenithy/src/index.js +17 -0
- package/nodenithy/src/preStart.js +45 -0
- package/nodenithy/src/preStart.mjs +57 -0
- package/nodenithy/src/reportWebVitals.js +13 -0
- package/nodenithy/src/serverless/backend.js +5 -0
- package/package.json +48 -0
- package/postinstall.js +34 -0
- package/publish.js +126 -0
- package/pynithy/build/docker-compose.yml +68 -0
- package/pynithy/build/las/Dockerfile +11 -0
- package/pynithy/build/las/src/etny_entrypoint.sh +6 -0
- package/pynithy/build/las/src/las_entrypoint.sh +26 -0
- package/pynithy/build/scripts/binary-fs-build.sh +28 -0
- package/pynithy/build/securelock/Dockerfile.tmpl +78 -0
- package/pynithy/build/securelock/scripts/binary-fs-build.sh +41 -0
- package/pynithy/build/securelock/src/app/.env +5 -0
- package/pynithy/build/securelock/src/app/cert1-ca1-clean.crt +10 -0
- package/pynithy/build/securelock/src/app/cert1-ca1-clean.key +6 -0
- package/pynithy/build/securelock/src/app/enclave_pub_cert.pem +10 -0
- package/pynithy/build/securelock/src/app/input.txt +1 -0
- package/pynithy/build/securelock/src/app/payload.py +25 -0
- package/pynithy/build/securelock/src/app/public-cert-clean.pem +10 -0
- package/pynithy/build/securelock/src/app/result.txt +1 -0
- package/pynithy/build/securelock/src/app/transaction.txt +1 -0
- package/pynithy/build/securelock/src/etny_crypto.py +167 -0
- package/pynithy/build/securelock/src/etny_exec.py +79 -0
- package/pynithy/build/securelock/src/image_registry.abi +1 -0
- package/pynithy/build/securelock/src/key_generation.py +17 -0
- package/pynithy/build/securelock/src/models.py +176 -0
- package/pynithy/build/securelock/src/pox.abi +1489 -0
- package/pynithy/build/securelock/src/securelock.py.tmpl +411 -0
- package/pynithy/build/securelock/src/swift_stream_service.py +186 -0
- package/pynithy/build/trustedzone/Dockerfile.tmpl +56 -0
- package/pynithy/build/trustedzone/scripts/binary-fs-build.sh +32 -0
- package/pynithy/build/trustedzone/src/app/.env +5 -0
- package/pynithy/build/trustedzone/src/app/cert1-ca1-clean.crt +10 -0
- package/pynithy/build/trustedzone/src/app/cert1-ca1-clean.key +6 -0
- package/pynithy/build/trustedzone/src/app/enclave_pub_cert.pem +10 -0
- package/pynithy/build/trustedzone/src/app/input.txt +1 -0
- package/pynithy/build/trustedzone/src/app/payload.py +25 -0
- package/pynithy/build/trustedzone/src/app/public-cert-clean.pem +10 -0
- package/pynithy/build/trustedzone/src/app/result.txt +1 -0
- package/pynithy/build/trustedzone/src/app/securelock.crt +10 -0
- package/pynithy/build/trustedzone/src/app/transaction.txt +1 -0
- package/pynithy/build/trustedzone/src/app/trustedzone.crt +10 -0
- package/pynithy/build/trustedzone/src/etny_crypto.py +188 -0
- package/pynithy/build/trustedzone/src/etny_exec.py +56 -0
- package/pynithy/build/trustedzone/src/formatter.py +42 -0
- package/pynithy/build/trustedzone/src/image_registry.abi +1 -0
- package/pynithy/build/trustedzone/src/key_generation.py +17 -0
- package/pynithy/build/trustedzone/src/models.py +176 -0
- package/pynithy/build/trustedzone/src/pox.abi +1489 -0
- package/pynithy/build/trustedzone/src/swift_stream_service.py +186 -0
- package/pynithy/build/trustedzone/src/trustedzone.py.tmpl +460 -0
- package/pynithy/build.mjs +179 -0
- package/pynithy/docker-compose.yml +0 -0
- package/pynithy/ipfs.mjs +244 -0
- package/pynithy/public/favicon.ico +0 -0
- package/pynithy/public/index.html +43 -0
- package/pynithy/public/logo192.png +0 -0
- package/pynithy/public/logo512.png +0 -0
- package/pynithy/public/manifest.json +25 -0
- package/pynithy/public/robots.txt +3 -0
- package/pynithy/run/certs/cert.pem +31 -0
- package/pynithy/run/certs/challenge.crt +10 -0
- package/pynithy/run/certs/key.pem +52 -0
- package/pynithy/run/docker-compose-final.yml +59 -0
- package/pynithy/run/docker-compose-final.yml.tmpl +59 -0
- package/pynithy/run/docker-compose-swift-stream.yml +27 -0
- package/pynithy/run/docker-compose-swift-stream.yml.tmpl +27 -0
- package/pynithy/run/docker-compose.yml +55 -0
- package/pynithy/run/docker-compose.yml.tmpl +55 -0
- package/pynithy/run/etny-pynity-test.yaml.tpl +46 -0
- package/pynithy/run/etny-securelock-test.yaml.tpl +46 -0
- package/pynithy/run/etny-trustedzone-test.yaml.tpl +46 -0
- package/pynithy/run/git.sh +22 -0
- package/pynithy/run/image_registry.abi +1 -0
- package/pynithy/run/image_registry.js +372 -0
- package/pynithy/run/image_registry.py +139 -0
- package/pynithy/run/image_registry_runner.py +45 -0
- package/pynithy/run/ipfs.sh +89 -0
- package/pynithy/run/public_key_service.js +90 -0
- package/pynithy/run/swiftstream.py +28 -0
- package/pynithy/run.js +538 -0
- package/pynithy/src/App.css +57 -0
- package/pynithy/src/ec_helloworld_example.js +64 -0
- package/pynithy/src/index.css +13 -0
- package/pynithy/src/index.js +17 -0
- package/pynithy/src/preStart.mjs +57 -0
- package/pynithy/src/reportWebVitals.js +13 -0
- package/pynithy/src/serverless/__init__.py +0 -0
- package/pynithy/src/serverless/backend.py +2 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import base64
|
|
4
|
+
import binascii
|
|
5
|
+
import codecs
|
|
6
|
+
import hashlib
|
|
7
|
+
import json
|
|
8
|
+
import secrets
|
|
9
|
+
from pyasn1.codec.der import decoder
|
|
10
|
+
from Crypto.Cipher import AES
|
|
11
|
+
from tinyec import registry
|
|
12
|
+
from tinyec import ec
|
|
13
|
+
from Crypto.PublicKey import ECC
|
|
14
|
+
from nacl.public import Box, PrivateKey, PublicKey
|
|
15
|
+
from base64 import a85encode
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class etny_crypto:
|
|
19
|
+
curve = registry.get_curve('secp384r1')
|
|
20
|
+
|
|
21
|
+
@staticmethod
|
|
22
|
+
def compress_point(point):
|
|
23
|
+
return hex(point.x) + hex(point.y % 2)[2:]
|
|
24
|
+
|
|
25
|
+
@staticmethod
|
|
26
|
+
def ecc_point_to_256_bit_key(point):
|
|
27
|
+
value = str(point.x) + str(point.y)
|
|
28
|
+
sha = hashlib.sha256(value.encode())
|
|
29
|
+
return sha.digest()
|
|
30
|
+
|
|
31
|
+
@staticmethod
|
|
32
|
+
def encrypt_aes_gcm(msg, secret_key):
|
|
33
|
+
aes_cipher = AES.new(secret_key, AES.MODE_GCM)
|
|
34
|
+
cipher_text, auth_tag = aes_cipher.encrypt_and_digest(msg)
|
|
35
|
+
return (cipher_text, aes_cipher.nonce, auth_tag)
|
|
36
|
+
|
|
37
|
+
@staticmethod
|
|
38
|
+
def encrypt_ecc(msg, public_key):
|
|
39
|
+
cipher_text_private_key = secrets.randbelow(etny_crypto.curve.field.n)
|
|
40
|
+
shared_ecc_key = cipher_text_private_key * public_key
|
|
41
|
+
secret_key = etny_crypto.ecc_point_to_256_bit_key(shared_ecc_key)
|
|
42
|
+
ciphertext, nonce, auth_tag = etny_crypto.encrypt_aes_gcm(msg, secret_key)
|
|
43
|
+
cipher_text_public_key = cipher_text_private_key * etny_crypto.curve.g
|
|
44
|
+
return (ciphertext, nonce, auth_tag, cipher_text_public_key)
|
|
45
|
+
|
|
46
|
+
@staticmethod
|
|
47
|
+
def decrypt_ase_gcm(ciphertext, nonce, auth_tag, secret_key):
|
|
48
|
+
aes_cipher = AES.new(secret_key, AES.MODE_GCM, nonce)
|
|
49
|
+
plaintext = aes_cipher.decrypt_and_verify(ciphertext, auth_tag)
|
|
50
|
+
return plaintext
|
|
51
|
+
|
|
52
|
+
@staticmethod
|
|
53
|
+
def decrypt_ecc(encrypted_msg, priv_key):
|
|
54
|
+
(ciphertext, nonce, authTag, ciphertextPubKey) = encrypted_msg
|
|
55
|
+
shared_ecc_key = priv_key * ciphertextPubKey
|
|
56
|
+
secret_key = etny_crypto.ecc_point_to_256_bit_key(shared_ecc_key)
|
|
57
|
+
plaintext = etny_crypto.decrypt_ase_gcm(ciphertext, nonce, authTag, secret_key)
|
|
58
|
+
return plaintext
|
|
59
|
+
|
|
60
|
+
@staticmethod
|
|
61
|
+
def ecc_read_key(public_key_file):
|
|
62
|
+
with open(public_key_file) as r:
|
|
63
|
+
key = ECC.import_key(r.read())
|
|
64
|
+
return key
|
|
65
|
+
|
|
66
|
+
@staticmethod
|
|
67
|
+
def encrypt(public_key_file, message):
|
|
68
|
+
with open(public_key_file) as f:
|
|
69
|
+
ecc_public_cert = ECC.import_key(f.read())
|
|
70
|
+
pub_key_ecc_point = ec.Point(etny_crypto.curve, ecc_public_cert.pointQ.x.__int__(),
|
|
71
|
+
ecc_public_cert.pointQ.y.__int__())
|
|
72
|
+
encrypted_msg = etny_crypto.encrypt_ecc(message, pub_key_ecc_point)
|
|
73
|
+
return encrypted_msg
|
|
74
|
+
|
|
75
|
+
@staticmethod
|
|
76
|
+
def encrypt_with_pub_key(pub_key_content, message):
|
|
77
|
+
ecc_public_cert = ECC.import_key(pub_key_content)
|
|
78
|
+
pub_key_ecc_point = ec.Point(etny_crypto.curve, ecc_public_cert.pointQ.x.__int__(),
|
|
79
|
+
ecc_public_cert.pointQ.y.__int__())
|
|
80
|
+
encrypted_msg = etny_crypto.encrypt_ecc(message, pub_key_ecc_point)
|
|
81
|
+
return encrypted_msg
|
|
82
|
+
|
|
83
|
+
@staticmethod
|
|
84
|
+
def clean_private_key(private_key_data):
|
|
85
|
+
private_key_data = private_key_data.replace(b"-----BEGIN PRIVATE KEY-----", b"")
|
|
86
|
+
private_key_data = private_key_data.replace(b"-----END PRIVATE KEY-----", b"")
|
|
87
|
+
private_key_data = codecs.decode(private_key_data, 'base64')
|
|
88
|
+
return private_key_data
|
|
89
|
+
|
|
90
|
+
@staticmethod
|
|
91
|
+
def decrypt(private_key_file, encrypted_msg):
|
|
92
|
+
# Reading and calculating Private Key from PEM
|
|
93
|
+
with open(private_key_file) as f:
|
|
94
|
+
private_key_data = str.encode(f.read())
|
|
95
|
+
|
|
96
|
+
private_key_data = etny_crypto.clean_private_key(private_key_data)
|
|
97
|
+
# decode der with asn1 library
|
|
98
|
+
# - get the octet string (field-2) containing the raw key
|
|
99
|
+
asn1_object, _ = decoder.decode(private_key_data)
|
|
100
|
+
raw_keys = asn1_object.getComponentByName('field-2').asOctets()
|
|
101
|
+
# - get the octet string (field-1) containing the raw private key
|
|
102
|
+
# and the bit string (field-2) containing the uncompressed public key
|
|
103
|
+
asn1_object, _ = decoder.decode(raw_keys)
|
|
104
|
+
private_key = asn1_object.getComponentByName('field-1').asOctets()
|
|
105
|
+
|
|
106
|
+
# Generating keypair for tinyEC
|
|
107
|
+
priv_key_tec = int.from_bytes(private_key, byteorder="big")
|
|
108
|
+
decrypted_msg = etny_crypto.decrypt_ecc(encrypted_msg, priv_key_tec)
|
|
109
|
+
#print("\ndecrypted msg:", decrypted_msg)
|
|
110
|
+
return decrypted_msg
|
|
111
|
+
|
|
112
|
+
@staticmethod
|
|
113
|
+
def encrypted_data_to_base64_json(encrypted_msg):
|
|
114
|
+
json_obj = {
|
|
115
|
+
'ciphertext': binascii.hexlify(encrypted_msg[0]).decode(),
|
|
116
|
+
'nonce': binascii.hexlify(encrypted_msg[1]).decode(),
|
|
117
|
+
'authTag': binascii.hexlify(encrypted_msg[2]).decode(),
|
|
118
|
+
'x': hex(encrypted_msg[3].x),
|
|
119
|
+
'y': hex(encrypted_msg[3].y)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
json_string = json.dumps(json_obj)
|
|
123
|
+
binary_data = json_string.encode('utf-8')
|
|
124
|
+
base64_data = base64.b64encode(binary_data)
|
|
125
|
+
|
|
126
|
+
return base64_data
|
|
127
|
+
|
|
128
|
+
@staticmethod
|
|
129
|
+
def encrypted_data_from_base64_json(base64_data):
|
|
130
|
+
# decode the base64-encoded string back to a JSON string
|
|
131
|
+
decoded_json_data = base64.b64decode(base64_data).decode('utf-8')
|
|
132
|
+
|
|
133
|
+
json_load = json.loads(decoded_json_data)
|
|
134
|
+
return (binascii.unhexlify(json_load['ciphertext'].encode()),
|
|
135
|
+
binascii.unhexlify(json_load['nonce'].encode()),
|
|
136
|
+
binascii.unhexlify(json_load['authTag'].encode()),
|
|
137
|
+
ec.Point(etny_crypto.curve, int(json_load['x'], 16),
|
|
138
|
+
int(json_load['y'], 16)))
|
|
139
|
+
|
|
140
|
+
@staticmethod
|
|
141
|
+
def hex_to_bytes(hex_str: str) -> bytes:
|
|
142
|
+
return bytes.fromhex(hex_str[2:] if hex_str[:2] == "0x" else hex_str)
|
|
143
|
+
|
|
144
|
+
@staticmethod
|
|
145
|
+
def encrypt_nacl(public_key: str, data: bytes) -> str:
|
|
146
|
+
"""Encryption function using NaCl box compatible with MetaMask
|
|
147
|
+
For implementation used in MetaMask look into: https://github.com/MetaMask/eth-sig-util
|
|
148
|
+
Args:
|
|
149
|
+
public_key: public key of recipient (32 bytes)
|
|
150
|
+
data: message data
|
|
151
|
+
Returns:
|
|
152
|
+
encrypted data
|
|
153
|
+
"""
|
|
154
|
+
emph_key = PrivateKey.generate()
|
|
155
|
+
enc_box = Box(emph_key, PublicKey(etny_crypto.hex_to_bytes(public_key)))
|
|
156
|
+
# Encryption must work with MetaMask decryption (requires valid utf-8)
|
|
157
|
+
data = a85encode(data)
|
|
158
|
+
ciphertext = enc_box.encrypt(data)
|
|
159
|
+
result = bytes(emph_key.public_key) + ciphertext
|
|
160
|
+
return result.hex()
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
if __name__ == '__main__':
|
|
164
|
+
encrypted_msg_ = etny_crypto.encrypt('./app/cert1-ca1-clean.crt', b'test')
|
|
165
|
+
#print(encrypted_msg_)
|
|
166
|
+
# etny_crypto.decrypt('./certs/cert1-ca1-clean.key', encrypted_msg_)
|
|
167
|
+
#print(etny_crypto.encrypted_data_to_base64_json(encrypted_msg_))
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import os.path
|
|
2
|
+
|
|
3
|
+
try:
|
|
4
|
+
import serverless.backend as backend
|
|
5
|
+
except ImportError:
|
|
6
|
+
backend = None
|
|
7
|
+
pass
|
|
8
|
+
|
|
9
|
+
sdkFunctions = {}
|
|
10
|
+
if backend is not None:
|
|
11
|
+
for func in backend.__dict__.keys():
|
|
12
|
+
if func not in backend.__builtins__.keys() and func not in [
|
|
13
|
+
"__file__",
|
|
14
|
+
"__cached__",
|
|
15
|
+
"__builtins__",
|
|
16
|
+
]:
|
|
17
|
+
sdkFunctions.update({func: backend.__dict__[func]})
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def ___etny_result___(data):
|
|
21
|
+
quit([0, data])
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class TaskStatus:
|
|
25
|
+
SUCCESS = 0
|
|
26
|
+
SYSTEM_ERROR = 1
|
|
27
|
+
KEY_ERROR = 2
|
|
28
|
+
SYNTAX_WARNING = 3
|
|
29
|
+
BASE_EXCEPTION = 4
|
|
30
|
+
PAYLOAD_NOT_DEFINED = 5
|
|
31
|
+
PAYLOAD_CHECKSUM_ERROR = 6
|
|
32
|
+
INPUT_CHECKSUM_ERROR = 7
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def execute_task(payload_data, input_data):
|
|
36
|
+
return Exec(
|
|
37
|
+
payload_data,
|
|
38
|
+
input_data,
|
|
39
|
+
{"___etny_result___": ___etny_result___, **sdkFunctions},
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def Exec(payload_data, input_data, globals=None, locals=None):
|
|
44
|
+
try:
|
|
45
|
+
if payload_data is not None:
|
|
46
|
+
if input_data is not None:
|
|
47
|
+
globals["___etny_data_set___"] = input_data
|
|
48
|
+
return ___etny_result___(eval(payload_data, globals, locals))
|
|
49
|
+
else:
|
|
50
|
+
return ___etny_result___(eval(payload_data, globals, locals))
|
|
51
|
+
else:
|
|
52
|
+
return (
|
|
53
|
+
TaskStatus.PAYLOAD_NOT_DEFINED,
|
|
54
|
+
"Could not find the source file to execute",
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
return TaskStatus.SUCCESS, "TASK EXECUTED SUCCESSFULLY"
|
|
58
|
+
except SystemError as e:
|
|
59
|
+
return TaskStatus.SYSTEM_ERROR, e.args[0]
|
|
60
|
+
except KeyError as e:
|
|
61
|
+
return TaskStatus.KEY_ERROR, e.args[0]
|
|
62
|
+
except SyntaxWarning as e:
|
|
63
|
+
return TaskStatus.SYNTAX_WARNING, e.args[0]
|
|
64
|
+
except BaseException as e:
|
|
65
|
+
try:
|
|
66
|
+
if e.args[0][0] == 0:
|
|
67
|
+
return TaskStatus.SUCCESS, e.args[0][1]
|
|
68
|
+
else:
|
|
69
|
+
return TaskStatus.BASE_EXCEPTION, e.args[0]
|
|
70
|
+
except Exception as e:
|
|
71
|
+
return TaskStatus.BASE_EXCEPTION, e.args[0]
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
# result = Exec('./v1/src/app/payload.py', './v1/src/app/input.txt',
|
|
75
|
+
# {'etny_print': etny_print})
|
|
76
|
+
# print('task result:', result)
|
|
77
|
+
|
|
78
|
+
# write the task result in a file
|
|
79
|
+
# generate task hash
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"}],"name":"AllowedWalletAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"}],"name":"AllowedWalletRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"ipfsHash","type":"string"},{"indexed":false,"internalType":"string","name":"publicKey","type":"string"},{"indexed":false,"internalType":"string","name":"version","type":"string"}],"name":"ImageAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"ipfsHash","type":"string"}],"name":"ImagePublished","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"ipfsHash","type":"string"}],"name":"ImageRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"ipfsHash","type":"string"}],"name":"ImageValidated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"ipfsHash","type":"string"}],"name":"TrustedZoneImageAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"ipfsHash","type":"string"}],"name":"TrustedZoneImageRemoved","type":"event"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"addAllowedWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"string","name":"certPublicKey","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"string","name":"imageName","type":"string"},{"internalType":"string","name":"dockerComposeHash","type":"string"},{"internalType":"string","name":"session","type":"string"},{"internalType":"uint8","name":"fee","type":"uint8"}],"name":"addImage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"string","name":"certPublicKey","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"string","name":"imageName","type":"string"},{"internalType":"string","name":"dockerComposeHash","type":"string"},{"internalType":"string","name":"session","type":"string"},{"internalType":"uint8","name":"fee","type":"uint8"}],"name":"addTrustedZoneImage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"address","name":"newRewardAddress","type":"address"}],"name":"changeImageRewardAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"address","name":"newRewardAddress","type":"address"}],"name":"changeTrustedZoneImageRewardAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"ipfsHash","type":"string"}],"name":"publishImage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeAllowedWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"ipfsHash","type":"string"}],"name":"validateImage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"ipfsHash","type":"string"}],"name":"getImageCertPublicKey","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"ipfsHash","type":"string"}],"name":"getImageSession","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"imageName","type":"string"},{"internalType":"string","name":"version","type":"string"}],"name":"getLatestImageVersionPublicKey","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"imageName","type":"string"},{"internalType":"string","name":"version","type":"string"}],"name":"getLatestTrustedZoneImageCertPublicKey","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"ipfsHash","type":"string"}],"name":"getRewardAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"ipfsHash","type":"string"}],"name":"getTrustedZoneImageCertPublicKey","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"ipfsHash","type":"string"}],"name":"getTrustedZoneImageSession","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"ipfsHash","type":"string"}],"name":"getTrustedZoneRewardAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"imageDetails","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"string","name":"session","type":"string"},{"internalType":"uint8","name":"fee","type":"uint8"},{"internalType":"address","name":"rewardAddress","type":"address"},{"internalType":"bool","name":"validated","type":"bool"},{"internalType":"bool","name":"published","type":"bool"},{"internalType":"string","name":"certPublicKey","type":"string"},{"internalType":"string","name":"dockerComposeHash","type":"string"},{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"images","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"imageVersions","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"imageVersionsHash","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"trustedZoneImageDetails","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"string","name":"session","type":"string"},{"internalType":"uint8","name":"fee","type":"uint8"},{"internalType":"address","name":"rewardAddress","type":"address"},{"internalType":"bool","name":"validated","type":"bool"},{"internalType":"bool","name":"published","type":"bool"},{"internalType":"string","name":"certPublicKey","type":"string"},{"internalType":"string","name":"dockerComposeHash","type":"string"},{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"trustedZoneImageVersions","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"trustedZoneVersionsHash","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import hashlib
|
|
2
|
+
from eth_account import Account
|
|
3
|
+
|
|
4
|
+
def get_wallet_address(first_string, second_string):
|
|
5
|
+
concat = (first_string + second_string).encode()
|
|
6
|
+
_hash1 = hashlib.sha256(concat).hexdigest()
|
|
7
|
+
_hash = hashlib.sha256(_hash1.encode()).hexdigest()
|
|
8
|
+
acct = Account.from_key(_hash)
|
|
9
|
+
return acct.address, _hash
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
if __name__ == '__main__':
|
|
13
|
+
first_string = 'test'
|
|
14
|
+
second_string = 'test'
|
|
15
|
+
(addr, private) = get_wallet_address(first_string, second_string)
|
|
16
|
+
print('account address = ', addr) # 0xf63106856F7007A30025f0fFD5A534EA880878C3
|
|
17
|
+
print('private = ', private)
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
class Order:
|
|
2
|
+
def __init__(self, req, order_id):
|
|
3
|
+
self.id = order_id
|
|
4
|
+
self.do_owner = req[0]
|
|
5
|
+
self.dproc = req[1]
|
|
6
|
+
self.do_req = req[2]
|
|
7
|
+
self.dp_req = req[3]
|
|
8
|
+
self.status = req[4]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class MetadataBase:
|
|
12
|
+
def __init__(self, metadata, version):
|
|
13
|
+
self.metadata = metadata
|
|
14
|
+
self._version = version
|
|
15
|
+
|
|
16
|
+
@property
|
|
17
|
+
def version(self):
|
|
18
|
+
return self._version
|
|
19
|
+
|
|
20
|
+
@property
|
|
21
|
+
def ipfs_hash(self):
|
|
22
|
+
raise NotImplementedError("Subclass must implement this method")
|
|
23
|
+
|
|
24
|
+
def checksum(self):
|
|
25
|
+
raise NotImplementedError("Subclass must implement this method")
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class PayloadFactory:
|
|
29
|
+
@staticmethod
|
|
30
|
+
def create_payload_metadata(metadata):
|
|
31
|
+
if ':' in metadata:
|
|
32
|
+
if metadata.startswith('v3'):
|
|
33
|
+
return PayloadMetadatav3(metadata)
|
|
34
|
+
else:
|
|
35
|
+
raise ValueError("Invalid payload metadata type")
|
|
36
|
+
else:
|
|
37
|
+
return PayloadMetadataV0(metadata)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class InputFactory:
|
|
41
|
+
@staticmethod
|
|
42
|
+
def create_input_metadata(metadata):
|
|
43
|
+
if ':' in metadata:
|
|
44
|
+
if metadata.startswith('v3'):
|
|
45
|
+
return InputMetadatav3(metadata)
|
|
46
|
+
else:
|
|
47
|
+
raise ValueError("Invalid payload metadata type")
|
|
48
|
+
else:
|
|
49
|
+
return InputMetadataV0(metadata)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class InputMetadataV0(MetadataBase):
|
|
53
|
+
def __init__(self, metadata):
|
|
54
|
+
super().__init__(metadata, 'v0')
|
|
55
|
+
self._ipfs_hash = metadata
|
|
56
|
+
|
|
57
|
+
@property
|
|
58
|
+
def ipfs_hash(self):
|
|
59
|
+
return self._ipfs_hash
|
|
60
|
+
|
|
61
|
+
@property
|
|
62
|
+
def checksum(self):
|
|
63
|
+
return None
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class PayloadMetadataV0(MetadataBase):
|
|
67
|
+
def __init__(self, metadata):
|
|
68
|
+
super().__init__(metadata, 'v0')
|
|
69
|
+
self._ipfs_hash = metadata
|
|
70
|
+
|
|
71
|
+
@property
|
|
72
|
+
def ipfs_hash(self):
|
|
73
|
+
return self._ipfs_hash
|
|
74
|
+
|
|
75
|
+
@property
|
|
76
|
+
def checksum(self):
|
|
77
|
+
return None
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class PayloadMetadatav3(MetadataBase):
|
|
81
|
+
|
|
82
|
+
def __init__(self, metadata):
|
|
83
|
+
super().__init__(metadata, 'v3')
|
|
84
|
+
self._checksum = metadata.split(':')[2]
|
|
85
|
+
self._ipfs_hash = metadata.split(':')[1]
|
|
86
|
+
|
|
87
|
+
@property
|
|
88
|
+
def ipfs_hash(self):
|
|
89
|
+
return self._ipfs_hash
|
|
90
|
+
|
|
91
|
+
@property
|
|
92
|
+
def checksum(self):
|
|
93
|
+
return self._checksum
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
class InputMetadatav3(MetadataBase):
|
|
97
|
+
|
|
98
|
+
def __init__(self, metadata):
|
|
99
|
+
super().__init__(metadata, 'v3')
|
|
100
|
+
self._checksum = metadata.split(':')[2]
|
|
101
|
+
self._ipfs_hash = metadata.split(':')[1]
|
|
102
|
+
|
|
103
|
+
@property
|
|
104
|
+
def ipfs_hash(self):
|
|
105
|
+
return self._ipfs_hash
|
|
106
|
+
|
|
107
|
+
@property
|
|
108
|
+
def checksum(self):
|
|
109
|
+
return self._checksum if self._checksum != '0' else self._checksum
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
class DOReqMetadata:
|
|
113
|
+
def __init__(self, req, do_req):
|
|
114
|
+
self._do_req_id = do_req
|
|
115
|
+
self._do_owner = req[0]
|
|
116
|
+
self._metadata1 = req[1]
|
|
117
|
+
self._metadata2 = req[2]
|
|
118
|
+
self._metadata3 = req[3]
|
|
119
|
+
self._metadata4 = req[4]
|
|
120
|
+
self._payload_metadata_obj = PayloadFactory.create_payload_metadata(self.payload_metadata)
|
|
121
|
+
self._input_metadata_obj = InputFactory.create_input_metadata(self.input_metadata)
|
|
122
|
+
|
|
123
|
+
@property
|
|
124
|
+
def do_req_id(self):
|
|
125
|
+
return self._do_req_id
|
|
126
|
+
|
|
127
|
+
@property
|
|
128
|
+
def do_owner(self):
|
|
129
|
+
return self._do_owner
|
|
130
|
+
|
|
131
|
+
@property
|
|
132
|
+
def image_metadata(self):
|
|
133
|
+
return self._metadata1
|
|
134
|
+
|
|
135
|
+
@property
|
|
136
|
+
def public_key(self):
|
|
137
|
+
return self.image_metadata.split(':')[5]
|
|
138
|
+
|
|
139
|
+
@property
|
|
140
|
+
def image_hash(self):
|
|
141
|
+
return self.image_metadata.split(':')[1]
|
|
142
|
+
|
|
143
|
+
@property
|
|
144
|
+
def payload_metadata(self):
|
|
145
|
+
return self._metadata2
|
|
146
|
+
|
|
147
|
+
@property
|
|
148
|
+
def payload_metadata_obj(self):
|
|
149
|
+
return self._payload_metadata_obj
|
|
150
|
+
|
|
151
|
+
@property
|
|
152
|
+
def input_metadata_obj(self):
|
|
153
|
+
return self._input_metadata_obj
|
|
154
|
+
|
|
155
|
+
@property
|
|
156
|
+
def input_metadata(self):
|
|
157
|
+
return self._metadata3
|
|
158
|
+
|
|
159
|
+
@property
|
|
160
|
+
def node_address(self):
|
|
161
|
+
return self._metadata4
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
# add_do_req(..., 'v3:image_:....:...:', 'v3:payload_hash:checksum', 'v3::0', 'node_address')
|
|
165
|
+
'''
|
|
166
|
+
input + payload
|
|
167
|
+
v0: 'ipfs_hash'
|
|
168
|
+
v3: 'v3:file_ipfs_hash:file_checksum'
|
|
169
|
+
|
|
170
|
+
image
|
|
171
|
+
v0: 'ipfs_hash:image_name'
|
|
172
|
+
v3: 'v3:image_ipfs_hash:image_name:docker_Compose_ipfs_hash:client_challenge_ipfs_hash:client_public_cert'
|
|
173
|
+
'''
|
|
174
|
+
if __name__ == '__main__':
|
|
175
|
+
obj = PayloadFactory.create_payload_metadata('v3:some_img_hash:fucker')
|
|
176
|
+
obj2 = PayloadFactory.create_payload_metadata('must not!')
|