Skip to content

Commit b910dd6

Browse files
Merge pull request #351 from hypersign-protocol/develop
release: v0.1.7
2 parents 27c0a3b + 0369721 commit b910dd6

File tree

8 files changed

+404
-68
lines changed

8 files changed

+404
-68
lines changed

tests/e2e/ssi_tests/e2e_tests.py

Lines changed: 171 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,31 @@ def create_did_test():
141141
create_tx_cmd = form_did_create_tx_multisig(did_doc_string, signers, DEFAULT_BLOCKCHAIN_ACCOUNT_NAME)
142142
run_blockchain_command(create_tx_cmd, f"Registering DID by passing both Alice's and Eve's Signature")
143143

144+
print("8. FAIL: Alice tries to register a DID Document with duplicate publicKeyMultibase of type Ed25519VerificationKey2020 \n")
145+
kp_alice = generate_key_pair()
146+
signers = []
147+
did_doc_string = generate_did_document(kp_alice)
148+
did_doc_string_2 = generate_did_document(kp_alice)
149+
150+
did_doc_string_vm_1 = did_doc_string["verificationMethod"][0]
151+
did_doc_string_vm_2 = did_doc_string_2["verificationMethod"][0]
152+
did_doc_string_vm_2["id"] = did_doc_string_vm_2["id"] + "new"
153+
154+
did_doc_string["verificationMethod"] = [
155+
did_doc_string_vm_1,
156+
did_doc_string_vm_2
157+
]
158+
159+
did_doc_alice = did_doc_string["id"]
160+
signPair_alice = {
161+
"kp": kp_alice,
162+
"verificationMethodId": did_doc_string["verificationMethod"][0]["id"],
163+
"signing_algo": "ed25519"
164+
}
165+
signers.append(signPair_alice)
166+
create_tx_cmd = form_did_create_tx_multisig(did_doc_string, signers, DEFAULT_BLOCKCHAIN_ACCOUNT_NAME)
167+
run_blockchain_command(create_tx_cmd, f"Registering Alice's DID with Id: {did_doc_alice}", True, True)
168+
144169
print("--- Test Completed ---\n")
145170

146171
# TC - II : Update DID scenarios
@@ -657,6 +682,8 @@ def caip10_ethereum_support_test():
657682
"eip155:1",
658683
"eip155:::::23",
659684
"eip155::0x1234567"
685+
"eip155:1000231432:0x23",
686+
"eip155:jagrat:0x23"
660687
]
661688

662689
for invalid_blockchain_id in invalid_blockchain_account_ids:
@@ -673,7 +700,7 @@ def caip10_ethereum_support_test():
673700
}
674701
signers.append(signPair)
675702
create_tx_cmd = form_did_create_tx_multisig(did_doc_string, signers, DEFAULT_BLOCKCHAIN_ACCOUNT_NAME)
676-
run_blockchain_command(create_tx_cmd, f"Registering a DID Document with an invalid blockchainAccountId: {invalid_blockchain_id}", True)
703+
run_blockchain_command(create_tx_cmd, f"Registering a DID Document with an invalid blockchainAccountId: {invalid_blockchain_id}", True, True)
677704

678705
print("Registering a DID with a VM of type EcdsaSecp256k1SignatureRecovery2020 having publicKeyMultibase attribute populated")
679706
kp = generate_key_pair(algo=kp_algo)
@@ -728,7 +755,7 @@ def caip10_cosmos_support_test():
728755
"cosmos:::::23",
729756
"cosmos::0x1234567"
730757
]
731-
758+
print("1. FAIL: Registering a DID Document with an invalid blockchainAccountIds.\n")
732759
for invalid_blockchain_id in invalid_blockchain_account_ids:
733760
print("Registering a DID Document with an invalid blockchainAccountId:", invalid_blockchain_id)
734761
kp = generate_key_pair(algo=kp_algo)
@@ -745,9 +772,9 @@ def caip10_cosmos_support_test():
745772
signers.append(signPair)
746773

747774
create_tx_cmd = form_did_create_tx_multisig(did_doc_string, signers, DEFAULT_BLOCKCHAIN_ACCOUNT_NAME)
748-
run_blockchain_command(create_tx_cmd, f"Registering a DID Document with an invalid blockchainAccountId: {invalid_blockchain_id}", True)
775+
run_blockchain_command(create_tx_cmd, f"Registering a DID Document with an invalid blockchainAccountId: {invalid_blockchain_id}", True, True)
749776

750-
print("Registering a DID with a VM of type EcdsaSecp256k1VerificationKey2019 having both publicKeyMultibase and blockchainAccountId attributes populated")
777+
print("2. PASS: Registering a DID with a VM of type EcdsaSecp256k1VerificationKey2019 having both publicKeyMultibase and blockchainAccountId attributes populated")
751778
kp = generate_key_pair(algo=kp_algo)
752779
did_doc_string = generate_did_document(kp, kp_algo)
753780
did_doc_id = did_doc_string["id"]
@@ -761,7 +788,7 @@ def caip10_cosmos_support_test():
761788
create_tx_cmd = form_did_create_tx_multisig(did_doc_string, signers, DEFAULT_BLOCKCHAIN_ACCOUNT_NAME)
762789
run_blockchain_command(create_tx_cmd, f"Registering the DID with DID Id {did_doc_id}")
763790

764-
print("Registering a DID with invalid chain-id in blockchainAccountId")
791+
print("3. FAIL: Registering a DID with invalid chain-id in blockchainAccountId")
765792
kp = generate_key_pair(algo=kp_algo)
766793
did_doc_string = generate_did_document(kp, kp_algo)
767794
did_doc_id = did_doc_string["id"]
@@ -775,9 +802,146 @@ def caip10_cosmos_support_test():
775802
"signing_algo": kp_algo
776803
}
777804
signers.append(signPair)
778-
779805
create_tx_cmd = form_did_create_tx_multisig(did_doc_string, signers, DEFAULT_BLOCKCHAIN_ACCOUNT_NAME)
780-
run_blockchain_command(create_tx_cmd, f"Registering DID with Id: {did_doc_id}", True)
806+
run_blockchain_command(create_tx_cmd, f"Registering DID with Id: {did_doc_id}", True, True)
807+
808+
print("4. PASS: Registering a DID with two VM of type EcdsaSecp256k1VerificationKey2019 with duplicate publicKeyMultibase and different blockchain account Id")
809+
kp = generate_key_pair(algo=kp_algo)
810+
811+
did_doc_string_1 = generate_did_document(kp, kp_algo)
812+
did_doc_string_2 = generate_did_document(kp, kp_algo, "osmo")
813+
did_doc_string_2_vm = did_doc_string_2["verificationMethod"][0]
814+
did_doc_string_2_vm["id"] = did_doc_string_2_vm["id"] + "new"
815+
816+
did_doc_string_1["verificationMethod"] = [
817+
did_doc_string_1["verificationMethod"][0],
818+
did_doc_string_2_vm,
819+
]
820+
did_doc_id = did_doc_string_1["id"]
821+
822+
signers = []
823+
signPair1 = {
824+
"kp": kp,
825+
"verificationMethodId": did_doc_string_1["verificationMethod"][0]["id"],
826+
"signing_algo": kp_algo
827+
}
828+
signPair2 = {
829+
"kp": kp,
830+
"verificationMethodId": did_doc_string_2["verificationMethod"][0]["id"],
831+
"signing_algo": kp_algo
832+
}
833+
signers.append(signPair1)
834+
signers.append(signPair2)
835+
create_tx_cmd = form_did_create_tx_multisig(did_doc_string_1, signers, DEFAULT_BLOCKCHAIN_ACCOUNT_NAME)
836+
run_blockchain_command(create_tx_cmd, f"Registering the DID with DID Id {did_doc_id}")
837+
838+
print("5. PASS: Registering a DID with two VM of type EcdsaSecp256k1VerificationKey2019 with duplicate publicKeyMultibase but one of them is without a blockchain account id")
839+
kp = generate_key_pair(algo=kp_algo)
840+
841+
did_doc_string_1 = generate_did_document(kp, kp_algo)
842+
did_doc_string_2 = generate_did_document(kp, kp_algo)
843+
did_doc_string_2_vm = did_doc_string_2["verificationMethod"][0]
844+
did_doc_string_2_vm["id"] = did_doc_string_2_vm["id"] + "new"
845+
846+
#Remove blockchainAccountIds
847+
did_doc_string_1["verificationMethod"][0]["blockchainAccountId"] = ""
848+
849+
did_doc_string_1["verificationMethod"] = [
850+
did_doc_string_1["verificationMethod"][0],
851+
did_doc_string_2_vm,
852+
]
853+
did_doc_id = did_doc_string_1["id"]
854+
855+
signers = []
856+
signPair1 = {
857+
"kp": kp,
858+
"verificationMethodId": did_doc_string_1["verificationMethod"][0]["id"],
859+
"signing_algo": kp_algo
860+
}
861+
signPair2 = {
862+
"kp": kp,
863+
"verificationMethodId": did_doc_string_2["verificationMethod"][0]["id"],
864+
"signing_algo": kp_algo
865+
}
866+
signers.append(signPair1)
867+
signers.append(signPair2)
868+
create_tx_cmd = form_did_create_tx_multisig(did_doc_string_1, signers, DEFAULT_BLOCKCHAIN_ACCOUNT_NAME)
869+
run_blockchain_command(create_tx_cmd, f"Registering the DID with DID Id {did_doc_id}")
870+
871+
print("6. FAIL: Registering a DID with two VM of type EcdsaSecp256k1VerificationKey2019 with duplicate publicKeyMultibase and duplicate blockchainAccountId")
872+
kp = generate_key_pair(algo=kp_algo)
873+
874+
did_doc_string_1 = generate_did_document(kp, kp_algo)
875+
did_doc_string_2 = generate_did_document(kp, kp_algo)
876+
877+
did_doc_vm1 = did_doc_string_1["verificationMethod"][0]
878+
did_doc_vm2 = did_doc_string_2["verificationMethod"][0]
879+
880+
# Change vm id
881+
did_doc_vm1["id"] = did_doc_vm1["id"] + "news"
882+
did_doc_vm2["id"] = did_doc_vm1["id"] + "2"
883+
884+
885+
did_doc_string_1["verificationMethod"] = [
886+
did_doc_vm1,
887+
did_doc_vm2
888+
]
889+
did_doc_id = did_doc_string_1["id"]
890+
891+
signers = []
892+
signPair1 = {
893+
"kp": kp,
894+
"verificationMethodId": did_doc_string_1["verificationMethod"][0]["id"],
895+
"signing_algo": kp_algo
896+
}
897+
signPair2 = {
898+
"kp": kp,
899+
"verificationMethodId": did_doc_string_1["verificationMethod"][1]["id"],
900+
"signing_algo": kp_algo
901+
}
902+
signers.append(signPair1)
903+
signers.append(signPair2)
904+
create_tx_cmd = form_did_create_tx_multisig(did_doc_string_1, signers, DEFAULT_BLOCKCHAIN_ACCOUNT_NAME)
905+
run_blockchain_command(create_tx_cmd, f"Registering the DID with DID Id {did_doc_id}", True, True)
906+
907+
print("7. FAIL: Registering a DID with two VM of type EcdsaSecp256k1VerificationKey2019 with duplicate publicKeyMultibase and no blockchainAccountId in either of them")
908+
kp = generate_key_pair(algo=kp_algo)
909+
910+
did_doc_string_1 = generate_did_document(kp, kp_algo)
911+
did_doc_string_2 = generate_did_document(kp, kp_algo)
912+
913+
did_doc_vm1 = did_doc_string_1["verificationMethod"][0]
914+
did_doc_vm2 = did_doc_string_2["verificationMethod"][0]
915+
916+
# Change vm id
917+
did_doc_vm1["id"] = did_doc_vm1["id"] + "news"
918+
did_doc_vm2["id"] = did_doc_vm1["id"] + "2"
919+
920+
# Remove blockchainAccountId
921+
did_doc_vm1["blockchainAccountId"] = ""
922+
did_doc_vm2["blockchainAccountId"] = ""
923+
924+
did_doc_string_1["verificationMethod"] = [
925+
did_doc_vm1,
926+
did_doc_vm2
927+
]
928+
did_doc_id = did_doc_string_1["id"]
929+
930+
signers = []
931+
signPair1 = {
932+
"kp": kp,
933+
"verificationMethodId": did_doc_string_1["verificationMethod"][0]["id"],
934+
"signing_algo": kp_algo
935+
}
936+
signPair2 = {
937+
"kp": kp,
938+
"verificationMethodId": did_doc_vm2["id"],
939+
"signing_algo": kp_algo
940+
}
941+
signers.append(signPair1)
942+
signers.append(signPair2)
943+
create_tx_cmd = form_did_create_tx_multisig(did_doc_string_1, signers, DEFAULT_BLOCKCHAIN_ACCOUNT_NAME)
944+
run_blockchain_command(create_tx_cmd, f"Registering the DID with DID Id {did_doc_id}", True, True)
781945

782946
print("--- Test Completed ---\n")
783947

tests/e2e/ssi_tests/generate_doc.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from utils import run_command, generate_document_id, get_document_signature, \
77
secp256k1_pubkey_to_address
88

9-
def generate_did_document(key_pair, algo="ed25519"):
9+
def generate_did_document(key_pair, algo="ed25519", bech32prefix="hid"):
1010
base_document = {
1111
"context" : [
1212
"https://www.w3.org/ns/did/v1"
@@ -41,8 +41,15 @@ def generate_did_document(key_pair, algo="ed25519"):
4141
verification_method["blockchainAccountId"] = "eip155:1:" + key_pair["ethereum_address"]
4242
elif algo == "secp256k1":
4343

44-
verification_method["blockchainAccountId"] = "cosmos:jagrat:" + \
45-
secp256k1_pubkey_to_address(key_pair["pub_key_base_64"], "hid")
44+
if bech32prefix == "hid":
45+
verification_method["blockchainAccountId"] = "cosmos:jagrat:" + \
46+
secp256k1_pubkey_to_address(key_pair["pub_key_base_64"], bech32prefix)
47+
elif bech32prefix == "osmo":
48+
verification_method["blockchainAccountId"] = "cosmos:osmosis-1:" + \
49+
secp256k1_pubkey_to_address(key_pair["pub_key_base_64"], bech32prefix)
50+
else:
51+
raise Exception("unsupported bech32 prefix " + bech32prefix)
52+
4653
verification_method["publicKeyMultibase"] = key_pair["pub_key_multibase"]
4754
else:
4855
verification_method["publicKeyMultibase"] = key_pair["pub_key_multibase"]

x/ssi/types/common.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,41 @@ var SupportedClientSpecs []string = []string{
5353
PersonalSignClientSpec,
5454
}
5555

56+
// Supported CAIP-10 Prefixes
57+
var SupportedCAIP10Prefixes = []string{
58+
EthereumCAIP10Prefix,
59+
CosmosCAIP10Prefix,
60+
}
61+
62+
var SupportedCAIP10EthereumChainIds = []string{
63+
// Ethereum-Based Mainnet Chains
64+
"1", // Ethereum Mainnet
65+
"137", // Polygon Mainnet
66+
"56", // Binance Smart Chain
67+
68+
// Ethereum-Based Testnet Chains
69+
"3", // Ropsten (Ethereum Testnet)
70+
"4", // Rinkeby (Ethereum Testnet)
71+
"5", // Goerli (Ethereum Testnet)
72+
"80001", // Polygon Mumbai Testnet
73+
"97", // Binance Smart Chain Testnet
74+
}
75+
76+
var SupportedCAIP10CosmosChainIds = []string{
77+
"cosmoshub-4", // Cosmos Hub
78+
"osmosis-1", // Osmosis
79+
"akashnet-2", // Akash
80+
"stargaze-1", // Stargaze
81+
"core-1", // Persistence
82+
"crypto-org-chain-mainnet-1", // Crypto.Org Chain
83+
84+
"theta-testnet-001", // Cosmos Hub Theta Testnet
85+
"osmo-test-4", // Osmosis Testnet
86+
"elgafar-1", // Stargaze Testnet
87+
"test-core-1", // Persistence Testnet
88+
"jagrat", // Hypersign Identity Network - Jagrat Testnet
89+
}
90+
5691
// Map between supported cosmos chain-id and their respective blockhchain address prefix
5792
var CosmosCAIP10ChainIdBech32PrefixMap = map[string]string{
5893
// Mainnet Chains
@@ -70,3 +105,9 @@ var CosmosCAIP10ChainIdBech32PrefixMap = map[string]string{
70105
"test-core-1": "persistence",
71106
"jagrat": "hid",
72107
}
108+
109+
// Map between support CAIP-10 prefix and list of chain-ids
110+
var SupportedCAIP10PrefixChainIdsMap = map[string][]string{
111+
EthereumCAIP10Prefix: SupportedCAIP10EthereumChainIds,
112+
CosmosCAIP10Prefix: SupportedCAIP10CosmosChainIds,
113+
}

0 commit comments

Comments
 (0)