Skip to content
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
cf5561b
Added address verification check
Nov 24, 2021
8fe3bf5
Version bump
gavinharris-dev Nov 24, 2021
6173f04
Fixed some bugs in verify
Nov 24, 2021
053964d
Merge branch 'main' of github.com:gavinharris-dev/web3-cardano-token
Nov 24, 2021
072ae8f
Merge branch 'pyropy:main' into main
gavinharris-dev Jan 22, 2022
33303ca
Updated for Review Comments
gavinharris-dev Jan 22, 2022
b457038
CIP30 changes
Feb 22, 2022
d209c8c
Merge branch 'main' into feature/cip30
gavinharris-dev Feb 22, 2022
6e686e6
Merge pull request #1 from gavinharris-dev/feature/cip30
gavinharris-dev Feb 22, 2022
f78a184
Bumpped version
Feb 23, 2022
83282d4
Merge branch 'feature/cip30' of github.com:gavinharris-dev/web3-carda…
Feb 23, 2022
19bb462
Merge pull request #2 from gavinharris-dev/feature/cip30
gavinharris-dev Feb 23, 2022
da1dc9b
RewardAddress is not a standalone Object!
Mar 8, 2022
8d3f6be
Merge pull request #3 from gavinharris-dev/feature/cip30
gavinharris-dev Mar 8, 2022
ed9b2a1
Check this out.
Mar 15, 2022
271a125
Merge pull request #4 from gavinharris-dev/feature/cip30
gavinharris-dev Mar 15, 2022
2c9bb35
Fix issue with Verification. There are still lots to fix; if only I c…
Mar 15, 2022
a619850
Fix issue with Verification. There are still lots to fix; if only I c…
Mar 15, 2022
f6e276c
wsdfg
Aug 24, 2022
2cc72b2
sdfds
Aug 24, 2022
f39848c
sdfds
Aug 24, 2022
daebc6a
Validate Stake Address validation
gavinharris-dev Jan 11, 2023
3e68824
Update package.json
gavinharris-dev Jan 11, 2023
f613fcc
Validate Stake Address validation
gavinharris-dev Jan 11, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added dist/01d712ed3b6fe8f23933.module.wasm
Binary file not shown.
1 change: 1 addition & 0 deletions dist/228.browser.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions dist/351.browser.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions dist/405.browser.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions dist/603.browser.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions dist/66.browser.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions dist/891.browser.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions dist/997.browser.js

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions dist/browser.js

Large diffs are not rendered by default.

10 changes: 10 additions & 0 deletions dist/browser.js.LICENSE.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/*!
* The buffer module from node.js, for the browser.
*
* @author Feross Aboukhadijeh <https://feross.org>
* @license MIT
*/

/*! https://mths.be/base64 v1.0.0 by @mathias | MIT license */

/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
Binary file added dist/ef0ca63316357c3c262f.module.wasm
Binary file not shown.
2 changes: 1 addition & 1 deletion dist/node.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 2 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
{
"name": "web3-cardano-token",
"version": "0.0.11",
"version": "0.0.12",
"private": false,
"description": "Web3 Token is a new way to authenticate users in hybrid dApps using signed messages.",
"author": "pyropy",
"scripts": {
"build": "webpack --mode=production --progress"
},
"types": "src/lib.d.ts",
"module": "src/lib.js",
"main": "dist/web3-cardano-token.js",
"dependencies": {
Expand Down
40 changes: 26 additions & 14 deletions src/lib.d.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,32 @@
type Signer = (msg: string) => PromiseLike<string>
type Signer = (msg: string) => PromiseLike<string>;

export function sign(
signer: Signer,
expires_in?: string | number,
body?: Object): PromiseLike<string>
signer: Signer,
expires_in?: string | number,
body?: Object
): PromiseLike<string>;

export function verify(
token: string
): {
address: string,
body: Object
}
export function verify(token: string): {
address: string;
body: Object;
};

declare const Web3Token: {
sign: typeof sign,
verify: typeof verify
}
sign: typeof sign;
verify: typeof verify;
};

export default Web3Token;

export default Web3Token
declare module "web3-cardano-token/dist/browser" {
export const Web3Token: {
sign: typeof sign;
verify: typeof verify;
};
}
declare module "web3-cardano-token/dist/node" {
export const Web3Token: {
sign: typeof sign;
verify: typeof verify;
};
}
59 changes: 56 additions & 3 deletions src/lib/verify.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
import Base64 from "base-64";
import parseAsHeaders from "parse-headers";
import { Buffer } from "buffer";
import Loader from "./loader";

import Loader from "./loader.js";
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is .js needed for import?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No its not needed

/**
*
* @param {string} token Signed Web3 Token
* @returns {boolean}
*/
export const verify = async (token) => {
if (!token || !token.length) {
throw new Error("Token required.");
Expand Down Expand Up @@ -43,6 +47,13 @@ export const verify = async (token) => {
const address = Loader.Cardano.Address.from_bytes(
headermap.header(Loader.Message.Label.new_text("address")).as_bytes()
);

const publicKey = Loader.Cardano.PublicKey.from_bytes(headermap.key_id());

if (!verifyAddress(address, publicKey)) {
throw new Error("Address verification failed");
}

const parsed_body = parseAsHeaders(body);

if (
Expand All @@ -52,5 +63,47 @@ export const verify = async (token) => {
throw new Error("Token expired");
}

return { address: address.to_bech32(), body: parsed_body };
return {
address: address.to_bech32(),
network: address.network_id(),
body: parsed_body,
};
};

const verifyAddress = (checkAddress, publicKey) => {
console.log("publicKey", publicKey.hash());
// if (this.headers.address.to_bech32() !== checkAddress.to_bech32()) {
// console.log("FASLE1");
// return false;
// }
// check if BaseAddress
try {
const baseAddress = Loader.Cardano.BaseAddress.from_address(checkAddress);
//reconstruct address
const paymentKeyHash = publicKey.hash();
const stakeKeyHash = baseAddress.stake_cred().to_keyhash();
const reconstructedAddress = Loader.Cardano.BaseAddress.new(
checkAddress.network_id(),
Loader.Cardano.StakeCredential.from_keyhash(paymentKeyHash),
Loader.Cardano.StakeCredential.from_keyhash(stakeKeyHash)
);

return (
checkAddress.to_bech32() === reconstructedAddress.to_address().to_bech32()
);
} catch (e) {
console.error(e);
}

try {
const stakeKeyHash = address.hash();
const reconstructedAddress = RewardAddress.new(
checkAddress.network_id(),
StakeCredential.from_keyhash(stakeKeyHash)
);
return (
checkAddress.to_bech32() === reconstructedAddress.to_address().to_bech32()
);
} catch (e) {}
return false;
};
8 changes: 8 additions & 0 deletions test.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { verify } from "./src/lib/verify.js";

(async () => {
const token =
"eyJzaWduYXR1cmUiOiI4NDU4NjlhMzAxMjcwNDU4MjA2ZjkzODllNDUzNGUxZjUyMzQ2MzBhYTRiYTlkODZkNTQ0MmVlYjQzNmQ3MDY2ODkyZjA2OGViZTYyYmQwNmJmNjc2MTY0NjQ3MjY1NzM3MzU4MzkwMDg5NDAwMDIzZTIyZWNlYTJjYTEyMjgzYmM0YzY1Yjc4NzIzOTA1YmUzMzA2ZDE3MTZlMDM5MWZkNmM3YmJmOTNjMjIwMGRhMTEyNjMzNGZjZGQ0Njk5YzZhMTI3ZjhlZmMzMmM5OTk0NDBhYTVhNzVhMTY2Njg2MTczNjg2NTY0ZjQ1ODQwNTc2NTYyMzMyZDU0NmY2YjY1NmUyZDU2NjU3MjczNjk2ZjZlM2EyMDMxMGE0NTc4NzA2OTcyNjUyZDQ0NjE3NDY1M2EyMDU0Njg3NTJjMjAzMjM1MjA0ZTZmNzYyMDMyMzAzMjMxMjAzMDMzM2EzNTMzM2EzMzM2MjA0NzRkNTQ1ODQwYjI5YTA5NDY0OTY3MDVjMzY2NDQyNjRiODk1NzRhNTRkYjY1MTM0OGJmNzI4M2IwMjFmMmE5MTQxYmFjYzJiOGE2ZjQ4MmQ1OTQxYWE4N2Y5M2IxODk4ZTAxZDQwZTUxYmM5ODAwY2QzYTExY2E1OWQ1ZTYwNzg4ZjdhOGY0MDQiLCJib2R5IjoiV2ViMy1Ub2tlbi1WZXJzaW9uOiAxXG5FeHBpcmUtRGF0ZTogVGh1LCAyNSBOb3YgMjAyMSAwMzo1MzozNiBHTVQifQ==";

console.log(await verify(token));
})();