Skip to content

Repository files navigation

Distributed-Verifier

Solidity Smart Contract for verifying ECDSA signatures on multiple curves

The blockchain is an innovative technology based on a distributed ledger shared between all nodes involved in the network. The nodes communicate with each other and manage data, which are transactions, according to a specific communication protocol. The blockchain allows transactions to be validated and stored in the distributed database shared across all the decentralized nodes. The transactions are public so that anyone can retrieve and verify them. Additionally, the transactions recorded in the distributed ledger are stored permanently and become immutable. The recent distributed ledger technology enables the deployment of smart contract onto the network nodes. Smart contracts are distributed apps (dApp) executed from all the nodes of the peer-to-peer network, that compute and agree on the results validating them. Every smart contract transaction requires a payment that is charged to the caller with an amount which is proportional to the complexity of the function called. The nodes use digital signatures computed over elliptic curves to verify transactions. Every blockchain employs a specific curve, for instance, Bitcoin and Ethereum use the SECP256K1. In this kind of environment is possible to verify only transactions that have a fixed structure and are signed on a specific curve. This work explores the feasibility of the creation of a smart contract able to verify the signature of a generic data calculated over multiple curves without being constrained to a specific blockchain’s curve. Although there are some challenges in implementing signature verification in this environment, this type of smart contract has been implemented and works correctly. Additionally the smart contract must be tested for compliance with NIST guidelines. Therefore, various tests have been conducted to ensure its accuracy in meeting the standards. Moreover, tests have been conducted to determine the financial cost and the time required for verification. Finally, a possible use case of the smart contract is presented, highlighting the advantages of blockchain over a centralised environment.

Use

  • first create a .env file where to store: API_URL="" PRIVATE_KEY="" PKEY1="" INFURA_API_KEY=""

  • run npm install to install all the needed npm dependencies, this script will not overwrite the hardhat.config.js already present. If a completely new hardhat.config.js is desired run ./init_script.sh

  • if a new deploy of the contract is desired run npx hardhat deploy --network sepolia instead of sepolia any network name declared in hardhat.config.js is ok. This will call the deploy.js script, as response the new contract address is give, save it!

  • to run anyone of the scripts run npx hardhat scripts/[script_name] --network sepolia as before any network can be selected. All the scripts have already declared inside the contract address to interact with, if a new one has been deployed change the address. Pay attention that the network in the command must be the same where the contract has the address.

  • the scripts with Test in the name interact with the two different functions of the Distributed Verifier, the one that perfome the hash and the one that does not. They are called in this way: contract.validateSignatureM or contract.validateSignatureH uncomment the one to test.

About

Solidity Smart Contract for verifying ECDSA signatures on multiple curves

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - FoxGhost/Distributed-Verifier: Solidity Smart Contract for verifying ECDSA signatures on multiple curves · GitHub
Skip to content

Repository files navigation

Distributed-Verifier

Solidity Smart Contract for verifying ECDSA signatures on multiple curves

The blockchain is an innovative technology based on a distributed ledger shared between all nodes involved in the network. The nodes communicate with each other and manage data, which are transactions, according to a specific communication protocol. The blockchain allows transactions to be validated and stored in the distributed database shared across all the decentralized nodes. The transactions are public so that anyone can retrieve and verify them. Additionally, the transactions recorded in the distributed ledger are stored permanently and become immutable. The recent distributed ledger technology enables the deployment of smart contract onto the network nodes. Smart contracts are distributed apps (dApp) executed from all the nodes of the peer-to-peer network, that compute and agree on the results validating them. Every smart contract transaction requires a payment that is charged to the caller with an amount which is proportional to the complexity of the function called. The nodes use digital signatures computed over elliptic curves to verify transactions. Every blockchain employs a specific curve, for instance, Bitcoin and Ethereum use the SECP256K1. In this kind of environment is possible to verify only transactions that have a fixed structure and are signed on a specific curve. This work explores the feasibility of the creation of a smart contract able to verify the signature of a generic data calculated over multiple curves without being constrained to a specific blockchain’s curve. Although there are some challenges in implementing signature verification in this environment, this type of smart contract has been implemented and works correctly. Additionally the smart contract must be tested for compliance with NIST guidelines. Therefore, various tests have been conducted to ensure its accuracy in meeting the standards. Moreover, tests have been conducted to determine the financial cost and the time required for verification. Finally, a possible use case of the smart contract is presented, highlighting the advantages of blockchain over a centralised environment.

Use

  • first create a .env file where to store: API_URL="" PRIVATE_KEY="" PKEY1="" INFURA_API_KEY=""

  • run npm install to install all the needed npm dependencies, this script will not overwrite the hardhat.config.js already present. If a completely new hardhat.config.js is desired run ./init_script.sh

  • if a new deploy of the contract is desired run npx hardhat deploy --network sepolia instead of sepolia any network name declared in hardhat.config.js is ok. This will call the deploy.js script, as response the new contract address is give, save it!

  • to run anyone of the scripts run npx hardhat scripts/[script_name] --network sepolia as before any network can be selected. All the scripts have already declared inside the contract address to interact with, if a new one has been deployed change the address. Pay attention that the network in the command must be the same where the contract has the address.

  • the scripts with Test in the name interact with the two different functions of the Distributed Verifier, the one that perfome the hash and the one that does not. They are called in this way: contract.validateSignatureM or contract.validateSignatureH uncomment the one to test.

About

Solidity Smart Contract for verifying ECDSA signatures on multiple curves

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - FoxGhost/Distributed-Verifier: Solidity Smart Contract for verifying ECDSA signatures on multiple curves · GitHub
Skip to content

Repository files navigation

Distributed-Verifier

Solidity Smart Contract for verifying ECDSA signatures on multiple curves

The blockchain is an innovative technology based on a distributed ledger shared between all nodes involved in the network. The nodes communicate with each other and manage data, which are transactions, according to a specific communication protocol. The blockchain allows transactions to be validated and stored in the distributed database shared across all the decentralized nodes. The transactions are public so that anyone can retrieve and verify them. Additionally, the transactions recorded in the distributed ledger are stored permanently and become immutable. The recent distributed ledger technology enables the deployment of smart contract onto the network nodes. Smart contracts are distributed apps (dApp) executed from all the nodes of the peer-to-peer network, that compute and agree on the results validating them. Every smart contract transaction requires a payment that is charged to the caller with an amount which is proportional to the complexity of the function called. The nodes use digital signatures computed over elliptic curves to verify transactions. Every blockchain employs a specific curve, for instance, Bitcoin and Ethereum use the SECP256K1. In this kind of environment is possible to verify only transactions that have a fixed structure and are signed on a specific curve. This work explores the feasibility of the creation of a smart contract able to verify the signature of a generic data calculated over multiple curves without being constrained to a specific blockchain’s curve. Although there are some challenges in implementing signature verification in this environment, this type of smart contract has been implemented and works correctly. Additionally the smart contract must be tested for compliance with NIST guidelines. Therefore, various tests have been conducted to ensure its accuracy in meeting the standards. Moreover, tests have been conducted to determine the financial cost and the time required for verification. Finally, a possible use case of the smart contract is presented, highlighting the advantages of blockchain over a centralised environment.

Use

  • first create a .env file where to store: API_URL="" PRIVATE_KEY="" PKEY1="" INFURA_API_KEY=""

  • run npm install to install all the needed npm dependencies, this script will not overwrite the hardhat.config.js already present. If a completely new hardhat.config.js is desired run ./init_script.sh

  • if a new deploy of the contract is desired run npx hardhat deploy --network sepolia instead of sepolia any network name declared in hardhat.config.js is ok. This will call the deploy.js script, as response the new contract address is give, save it!

  • to run anyone of the scripts run npx hardhat scripts/[script_name] --network sepolia as before any network can be selected. All the scripts have already declared inside the contract address to interact with, if a new one has been deployed change the address. Pay attention that the network in the command must be the same where the contract has the address.

  • the scripts with Test in the name interact with the two different functions of the Distributed Verifier, the one that perfome the hash and the one that does not. They are called in this way: contract.validateSignatureM or contract.validateSignatureH uncomment the one to test.

About

Solidity Smart Contract for verifying ECDSA signatures on multiple curves

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - FoxGhost/Distributed-Verifier: Solidity Smart Contract for verifying ECDSA signatures on multiple curves · GitHub
Skip to content

Repository files navigation

Distributed-Verifier

Solidity Smart Contract for verifying ECDSA signatures on multiple curves

The blockchain is an innovative technology based on a distributed ledger shared between all nodes involved in the network. The nodes communicate with each other and manage data, which are transactions, according to a specific communication protocol. The blockchain allows transactions to be validated and stored in the distributed database shared across all the decentralized nodes. The transactions are public so that anyone can retrieve and verify them. Additionally, the transactions recorded in the distributed ledger are stored permanently and become immutable. The recent distributed ledger technology enables the deployment of smart contract onto the network nodes. Smart contracts are distributed apps (dApp) executed from all the nodes of the peer-to-peer network, that compute and agree on the results validating them. Every smart contract transaction requires a payment that is charged to the caller with an amount which is proportional to the complexity of the function called. The nodes use digital signatures computed over elliptic curves to verify transactions. Every blockchain employs a specific curve, for instance, Bitcoin and Ethereum use the SECP256K1. In this kind of environment is possible to verify only transactions that have a fixed structure and are signed on a specific curve. This work explores the feasibility of the creation of a smart contract able to verify the signature of a generic data calculated over multiple curves without being constrained to a specific blockchain’s curve. Although there are some challenges in implementing signature verification in this environment, this type of smart contract has been implemented and works correctly. Additionally the smart contract must be tested for compliance with NIST guidelines. Therefore, various tests have been conducted to ensure its accuracy in meeting the standards. Moreover, tests have been conducted to determine the financial cost and the time required for verification. Finally, a possible use case of the smart contract is presented, highlighting the advantages of blockchain over a centralised environment.

Use

  • first create a .env file where to store: API_URL="" PRIVATE_KEY="" PKEY1="" INFURA_API_KEY=""

  • run npm install to install all the needed npm dependencies, this script will not overwrite the hardhat.config.js already present. If a completely new hardhat.config.js is desired run ./init_script.sh

  • if a new deploy of the contract is desired run npx hardhat deploy --network sepolia instead of sepolia any network name declared in hardhat.config.js is ok. This will call the deploy.js script, as response the new contract address is give, save it!

  • to run anyone of the scripts run npx hardhat scripts/[script_name] --network sepolia as before any network can be selected. All the scripts have already declared inside the contract address to interact with, if a new one has been deployed change the address. Pay attention that the network in the command must be the same where the contract has the address.

  • the scripts with Test in the name interact with the two different functions of the Distributed Verifier, the one that perfome the hash and the one that does not. They are called in this way: contract.validateSignatureM or contract.validateSignatureH uncomment the one to test.

About

Solidity Smart Contract for verifying ECDSA signatures on multiple curves

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - FoxGhost/Distributed-Verifier: Solidity Smart Contract for verifying ECDSA signatures on multiple curves · GitHub
Skip to content

Repository files navigation

Distributed-Verifier

Solidity Smart Contract for verifying ECDSA signatures on multiple curves

The blockchain is an innovative technology based on a distributed ledger shared between all nodes involved in the network. The nodes communicate with each other and manage data, which are transactions, according to a specific communication protocol. The blockchain allows transactions to be validated and stored in the distributed database shared across all the decentralized nodes. The transactions are public so that anyone can retrieve and verify them. Additionally, the transactions recorded in the distributed ledger are stored permanently and become immutable. The recent distributed ledger technology enables the deployment of smart contract onto the network nodes. Smart contracts are distributed apps (dApp) executed from all the nodes of the peer-to-peer network, that compute and agree on the results validating them. Every smart contract transaction requires a payment that is charged to the caller with an amount which is proportional to the complexity of the function called. The nodes use digital signatures computed over elliptic curves to verify transactions. Every blockchain employs a specific curve, for instance, Bitcoin and Ethereum use the SECP256K1. In this kind of environment is possible to verify only transactions that have a fixed structure and are signed on a specific curve. This work explores the feasibility of the creation of a smart contract able to verify the signature of a generic data calculated over multiple curves without being constrained to a specific blockchain’s curve. Although there are some challenges in implementing signature verification in this environment, this type of smart contract has been implemented and works correctly. Additionally the smart contract must be tested for compliance with NIST guidelines. Therefore, various tests have been conducted to ensure its accuracy in meeting the standards. Moreover, tests have been conducted to determine the financial cost and the time required for verification. Finally, a possible use case of the smart contract is presented, highlighting the advantages of blockchain over a centralised environment.

Use

  • first create a .env file where to store: API_URL="" PRIVATE_KEY="" PKEY1="" INFURA_API_KEY=""

  • run npm install to install all the needed npm dependencies, this script will not overwrite the hardhat.config.js already present. If a completely new hardhat.config.js is desired run ./init_script.sh

  • if a new deploy of the contract is desired run npx hardhat deploy --network sepolia instead of sepolia any network name declared in hardhat.config.js is ok. This will call the deploy.js script, as response the new contract address is give, save it!

  • to run anyone of the scripts run npx hardhat scripts/[script_name] --network sepolia as before any network can be selected. All the scripts have already declared inside the contract address to interact with, if a new one has been deployed change the address. Pay attention that the network in the command must be the same where the contract has the address.

  • the scripts with Test in the name interact with the two different functions of the Distributed Verifier, the one that perfome the hash and the one that does not. They are called in this way: contract.validateSignatureM or contract.validateSignatureH uncomment the one to test.

About

Solidity Smart Contract for verifying ECDSA signatures on multiple curves

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - FoxGhost/Distributed-Verifier: Solidity Smart Contract for verifying ECDSA signatures on multiple curves · GitHub
Skip to content

Repository files navigation

Distributed-Verifier

Solidity Smart Contract for verifying ECDSA signatures on multiple curves

The blockchain is an innovative technology based on a distributed ledger shared between all nodes involved in the network. The nodes communicate with each other and manage data, which are transactions, according to a specific communication protocol. The blockchain allows transactions to be validated and stored in the distributed database shared across all the decentralized nodes. The transactions are public so that anyone can retrieve and verify them. Additionally, the transactions recorded in the distributed ledger are stored permanently and become immutable. The recent distributed ledger technology enables the deployment of smart contract onto the network nodes. Smart contracts are distributed apps (dApp) executed from all the nodes of the peer-to-peer network, that compute and agree on the results validating them. Every smart contract transaction requires a payment that is charged to the caller with an amount which is proportional to the complexity of the function called. The nodes use digital signatures computed over elliptic curves to verify transactions. Every blockchain employs a specific curve, for instance, Bitcoin and Ethereum use the SECP256K1. In this kind of environment is possible to verify only transactions that have a fixed structure and are signed on a specific curve. This work explores the feasibility of the creation of a smart contract able to verify the signature of a generic data calculated over multiple curves without being constrained to a specific blockchain’s curve. Although there are some challenges in implementing signature verification in this environment, this type of smart contract has been implemented and works correctly. Additionally the smart contract must be tested for compliance with NIST guidelines. Therefore, various tests have been conducted to ensure its accuracy in meeting the standards. Moreover, tests have been conducted to determine the financial cost and the time required for verification. Finally, a possible use case of the smart contract is presented, highlighting the advantages of blockchain over a centralised environment.

Use

  • first create a .env file where to store: API_URL="" PRIVATE_KEY="" PKEY1="" INFURA_API_KEY=""

  • run npm install to install all the needed npm dependencies, this script will not overwrite the hardhat.config.js already present. If a completely new hardhat.config.js is desired run ./init_script.sh

  • if a new deploy of the contract is desired run npx hardhat deploy --network sepolia instead of sepolia any network name declared in hardhat.config.js is ok. This will call the deploy.js script, as response the new contract address is give, save it!

  • to run anyone of the scripts run npx hardhat scripts/[script_name] --network sepolia as before any network can be selected. All the scripts have already declared inside the contract address to interact with, if a new one has been deployed change the address. Pay attention that the network in the command must be the same where the contract has the address.

  • the scripts with Test in the name interact with the two different functions of the Distributed Verifier, the one that perfome the hash and the one that does not. They are called in this way: contract.validateSignatureM or contract.validateSignatureH uncomment the one to test.

About

Solidity Smart Contract for verifying ECDSA signatures on multiple curves

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - FoxGhost/Distributed-Verifier: Solidity Smart Contract for verifying ECDSA signatures on multiple curves · GitHub
Skip to content

Repository files navigation

Distributed-Verifier

Solidity Smart Contract for verifying ECDSA signatures on multiple curves

The blockchain is an innovative technology based on a distributed ledger shared between all nodes involved in the network. The nodes communicate with each other and manage data, which are transactions, according to a specific communication protocol. The blockchain allows transactions to be validated and stored in the distributed database shared across all the decentralized nodes. The transactions are public so that anyone can retrieve and verify them. Additionally, the transactions recorded in the distributed ledger are stored permanently and become immutable. The recent distributed ledger technology enables the deployment of smart contract onto the network nodes. Smart contracts are distributed apps (dApp) executed from all the nodes of the peer-to-peer network, that compute and agree on the results validating them. Every smart contract transaction requires a payment that is charged to the caller with an amount which is proportional to the complexity of the function called. The nodes use digital signatures computed over elliptic curves to verify transactions. Every blockchain employs a specific curve, for instance, Bitcoin and Ethereum use the SECP256K1. In this kind of environment is possible to verify only transactions that have a fixed structure and are signed on a specific curve. This work explores the feasibility of the creation of a smart contract able to verify the signature of a generic data calculated over multiple curves without being constrained to a specific blockchain’s curve. Although there are some challenges in implementing signature verification in this environment, this type of smart contract has been implemented and works correctly. Additionally the smart contract must be tested for compliance with NIST guidelines. Therefore, various tests have been conducted to ensure its accuracy in meeting the standards. Moreover, tests have been conducted to determine the financial cost and the time required for verification. Finally, a possible use case of the smart contract is presented, highlighting the advantages of blockchain over a centralised environment.

Use

  • first create a .env file where to store: API_URL="" PRIVATE_KEY="" PKEY1="" INFURA_API_KEY=""

  • run npm install to install all the needed npm dependencies, this script will not overwrite the hardhat.config.js already present. If a completely new hardhat.config.js is desired run ./init_script.sh

  • if a new deploy of the contract is desired run npx hardhat deploy --network sepolia instead of sepolia any network name declared in hardhat.config.js is ok. This will call the deploy.js script, as response the new contract address is give, save it!

  • to run anyone of the scripts run npx hardhat scripts/[script_name] --network sepolia as before any network can be selected. All the scripts have already declared inside the contract address to interact with, if a new one has been deployed change the address. Pay attention that the network in the command must be the same where the contract has the address.

  • the scripts with Test in the name interact with the two different functions of the Distributed Verifier, the one that perfome the hash and the one that does not. They are called in this way: contract.validateSignatureM or contract.validateSignatureH uncomment the one to test.

About

Solidity Smart Contract for verifying ECDSA signatures on multiple curves

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - FoxGhost/Distributed-Verifier: Solidity Smart Contract for verifying ECDSA signatures on multiple curves · GitHub
Skip to content

Repository files navigation

Distributed-Verifier

Solidity Smart Contract for verifying ECDSA signatures on multiple curves

The blockchain is an innovative technology based on a distributed ledger shared between all nodes involved in the network. The nodes communicate with each other and manage data, which are transactions, according to a specific communication protocol. The blockchain allows transactions to be validated and stored in the distributed database shared across all the decentralized nodes. The transactions are public so that anyone can retrieve and verify them. Additionally, the transactions recorded in the distributed ledger are stored permanently and become immutable. The recent distributed ledger technology enables the deployment of smart contract onto the network nodes. Smart contracts are distributed apps (dApp) executed from all the nodes of the peer-to-peer network, that compute and agree on the results validating them. Every smart contract transaction requires a payment that is charged to the caller with an amount which is proportional to the complexity of the function called. The nodes use digital signatures computed over elliptic curves to verify transactions. Every blockchain employs a specific curve, for instance, Bitcoin and Ethereum use the SECP256K1. In this kind of environment is possible to verify only transactions that have a fixed structure and are signed on a specific curve. This work explores the feasibility of the creation of a smart contract able to verify the signature of a generic data calculated over multiple curves without being constrained to a specific blockchain’s curve. Although there are some challenges in implementing signature verification in this environment, this type of smart contract has been implemented and works correctly. Additionally the smart contract must be tested for compliance with NIST guidelines. Therefore, various tests have been conducted to ensure its accuracy in meeting the standards. Moreover, tests have been conducted to determine the financial cost and the time required for verification. Finally, a possible use case of the smart contract is presented, highlighting the advantages of blockchain over a centralised environment.

Use

  • first create a .env file where to store: API_URL="" PRIVATE_KEY="" PKEY1="" INFURA_API_KEY=""

  • run npm install to install all the needed npm dependencies, this script will not overwrite the hardhat.config.js already present. If a completely new hardhat.config.js is desired run ./init_script.sh

  • if a new deploy of the contract is desired run npx hardhat deploy --network sepolia instead of sepolia any network name declared in hardhat.config.js is ok. This will call the deploy.js script, as response the new contract address is give, save it!

  • to run anyone of the scripts run npx hardhat scripts/[script_name] --network sepolia as before any network can be selected. All the scripts have already declared inside the contract address to interact with, if a new one has been deployed change the address. Pay attention that the network in the command must be the same where the contract has the address.

  • the scripts with Test in the name interact with the two different functions of the Distributed Verifier, the one that perfome the hash and the one that does not. They are called in this way: contract.validateSignatureM or contract.validateSignatureH uncomment the one to test.

About

Solidity Smart Contract for verifying ECDSA signatures on multiple curves

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages